如何使用Web服务创建树?
答
使用递归定义,如:
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
}
}
不明白 - 是否需要使用或返回树数据结构的服务方法,并且需要有关为数据结构定义可套用xml模式的帮助? – 2010-08-20 12:30:37
没有..例如在这个链接中给出http://www.eclipse.org/webtools/jst/components/ws/1.5/tutorials/BottomUpWebService/BottomUpWebService.html他们已经创建了一个单一的转换功能。像那样我应该如何创建一棵树。或者我的方法是错误的?我完全困惑。如果这不是在Web服务中创建树的正确方法?有任何指导链接或教程? – Aru 2010-08-20 12:47:21