2010-08-20 1 views
0

웹 서비스를 사용하여 트리 구조를 만들고 싶습니다. 간단한 알고리즘 생성을 위해 bottom up 웹 서비스 기술을 사용했습니다. 웹 서비스를 사용하여 트리를 작성하는 방법을 이해할 수 없습니다. 이것을 달성 할 방법이 있습니까?웹 서비스를 사용하여 트리를 만드는 방법은 무엇입니까?

+0

이해하지 못함 - 트리 데이터 구조를 사용하거나 반환하는 서비스 메서드가 필요하며 데이터 구조에 대해 suiteable xml 스키마를 정의하는 데 도움이 필요합니까? –

+0

아니요 .. 예를 들어이 링크 http://www.eclipse.org/webtools/jst/components/ws/1.5/tutorials/BottomUpWebService/BottomUpWebService.html에 나와 있습니다. 이들은 변환을위한 단일 기능을 만들었습니다. 그런 식으로 나무를 만들려면 어떻게해야합니까? 또는 내 접근 방식이 잘못 되었습니까? 나는 완전히 혼란 스럽다. 이것이 올바른 방법이 아닌 경우 웹 서비스에서 트리를 만들 수 있습니까? 지침을위한 링크 또는 자습서가 있습니까? – Aru

답변

0

사용 재귀 정의와 같은 :

expr = expr1 operand expr2 | node 
expr1 = expr 
expr2 = expr 

operand = '+' | '-' 

node = number 

그런 다음 당신이

15 + 3 JSON 또는 XML을 사용하여 간단하게 인코딩 cqn - 2

{ "expr" : 
    { "expr1": { "expr1":"15" "operand":"+" "expr2":"3"} 
    "operand": "-" 
    "expr2": "2"}} 

또는 XML에이된다을

<expr> 
    <expr1> 
     <expr1>15</expr1> 
     <operand>+</operand> 
     <expr2>3</expr2> 
    </expr1> 
    <operand>+</operand> 
    <expr2>2</expr2> 
</expr> 

서비스에서 나무를 걸거나 나무를 만들 수 있습니다. 서비스를 소비자 또는 생산자로 본다면 확실하지 않습니다.

0

당신이 Axis2와를 사용하여 그루비에서 웹 서비스를 구현하는 경우, 당신은 Axis2를 low level Axiom API 호출을 생성하는 빌더 만들 수 있습니다

package example 

import groovy.util.BuilderSupport 

import org.apache.axiom.om.OMAbstractFactory 
import org.apache.axiom.om.OMElement 
import org.apache.axiom.om.OMFactory 
import org.apache.axiom.om.OMNamespace 

class OMElementBuilder extends BuilderSupport { 

    OMElement result 
    String namespace 

    OMElementBuilder(namespace) { 
     this.namespace = namespace 
    } 

    def createNode(name) { 
     return createNode(name, null, null) 
    } 

    def createNode(name, value) { 
     return createNode(name, null, value) 
    } 

    def createNode(name, Map attributes) { 
     return createNode(name, attributes, null) 
    } 

    def createNode(name, Map attributes, value) { 
     OMFactory fact = OMAbstractFactory.getOMFactory() 
     OMNamespace omNs = fact.createOMNamespace(namespace, "ns") 
     OMElement node = fact.createOMElement(name, omNs) 

     if (value) { 
      fact.createOMText(node, value) 
     } 

     return node 
    } 

    void setParent(parent, child) { 
     parent.addChild(child) 
    } 

    void nodeCompleted(parent, node) { 
     if (!parent) { 
      result = node 
     } 
    } 
} 

모든 arbitray XML 구조는 다음과 같이 생성 한 후 쉽게 :

package example 

import org.apache.axis2.AxisFault 
import org.apache.axiom.om.OMElement 
import javax.xml.namespace.QName 

public class BankService { 

    // withdraw operation 
    public OMElement withdraw(OMElement requestElement) { 

     // Build the response 
     def builder = new OMElementBuilder("http://example") 

     builder.withdrawResponse() { 
      balance("1000") 
      additionalInfo() { 
       item() { 
        message("hello world") 
       } 
       item() { 
        message("hello world") 
       } 
       item() { 
        message("hello world") 
       } 
       item() { 
        message("hello world") 
       } 
      } 
     } 

     return builder.result 
    } 
}