如何使用Web服务创建树?

问题描述:

我想使用web服务创建树结构。 我使用自下而上的网络服务技术来创建简单的算术运算。 我无法理解,如何使用Web服务构建树。 有没有办法做到这一点?如何使用Web服务创建树?

+0

不明白 - 是否需要使用或返回树数据结构的服务方法,并且需要有关为数据结构定义可套用xml模式的帮助? – 2010-08-20 12:30:37

+0

没有..例如在这个链接中给出http://www.eclipse.org/webtools/jst/components/ws/1.5/tutorials/BottomUpWebService/BottomUpWebService.html他们已经创建了一个单一的转换功能。像那样我应该如何创建一棵树。或者我的方法是错误的?我完全困惑。如果这不是在Web服务中创建树的正确方法?有任何指导链接或教程? – Aru 2010-08-20 12:47:21

使用递归定义,如:

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

operand = '+' | '-' 

node = number 

然后你CQN使用JSON或XML它

15 + 3简单的编码 - 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> 

在服务中,您可以走树或建树。我不确定您是否将服务视为消费者或制作人。

如果要实现使用Axis2在Groovy Web服务,您可以创建一个可生成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 
     } 
    } 
} 

任何任意波形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 
    } 
}