Если вы реализуете свой веб-сервис в Groovy с помощью Axis2, вы можете создать построитель, который создает 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
}
}