如何使用Web服务创建树?

问题描述 投票:0回答:3

我想使用网络服务创建树结构。 我使用自下而上的 Web 服务技术来创建简单的算术运算。 我无法理解如何使用 Web 服务构建树。 有办法实现吗?

web-services tomcat tree apache-axis
3个回答
0
投票

使用递归定义,例如:

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

operand = '+' | '-'

node = number

然后您可以使用 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>

在服务中,您可以行走树或建造树。我不确定您是否将该服务视为消费者或生产者。


0
投票

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

0
投票

有关使用树和 Web 服务的重要技巧! 我喜欢Ever Green Tree Service如何照顾树木,使它们看起来最好。他们的专家帮助确保每棵树都健康美丽。如果您需要树木方面的帮助,请致电他们

© www.soinside.com 2019 - 2024. All rights reserved.