Java 如何从 SOAP 主体中获取子元素?
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/18781021/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
how to get child element from SOAP body?
提问by user2648768
How can I get clientCode from requestHeader which is located under SOAP body?
如何从位于 SOAP 主体下的 requestHeader 获取 clientCode?
<soapenv:Body>
<ser:GS>
<!--Optional:-->
<requestHeader>
<!--Optional:-->
<req:clientCode>KL7MU</req:clientCode>
<!--Optional:-->
<req:clientUsername>BLABLA</req:clientUsername>
</requestHeader>
</ser:GS>
</soapenv:Body>
I try to get but iterator.hasNext()
returns false
.
我试图得到但iterator.hasNext()
返回false
。
SOAPBody soapBody = context.getMessage().getSOAPBody();
java.util.Iterator iterator = soapBody.getChildElements();
while (iterator.hasNext()) {
SOAPBodyElement bodyElement = (SOAPBodyElement) iterator.next();
String val = bodyElement.getValue();
System.out.println("The Value is:" + val);
}
回答by Balaji Krishnan
instead of getting form SOAP message body try the child elements form SOAP message header like context.getMessage().getSOAPPart().getEnvelope().getHeader(); details :http://www.mkyong.com/webservices/jax-ws/jax-ws-soap-handler-in-client-side/
而不是获取表单 SOAP 消息体,尝试子元素表单 SOAP 消息头,如 context.getMessage().getSOAPPart().getEnvelope().getHeader(); 详情:http: //www.mkyong.com/webservices/jax-ws/jax-ws-soap-handler-in-client-side/
回答by imxylz
You can use wsdl to generate java class:
您可以使用 wsdl 生成 java 类:
wsimport stock.wsdl -b stock.xml -b stock.xjb
wsimport -d generated http://example.org/stock?wsdl
Then you can call SOAP services as local methods.
然后您可以将 SOAP 服务作为本地方法调用。
Some other tools:
其他一些工具:
wsdl2javawizard: http://sourceforge.net/projects/wsdl2javawizard/
wsdl2javawizard:http: //sourceforge.net/projects/wsdl2javawizard/
apache cxf: http://cxf.apache.org/docs/wsdl-to-java.html
apache cxf:http: //cxf.apache.org/docs/wsdl-to-java.html
回答by Marlio
You can get the values like in axiom,
你可以得到像 axiom 中的值,
SOAPEnvelope mes = messageContext.getEnvelope();
SOAPHeader mesh = mes.getHeader();
SOAPBody mesb = mes.getBody();
OMElement messageId = mesh.getFirstChildWithName(new QName("http://www.w3.org/2005/08/addressing","MessageID"));
String messageIDStr = messageId.getText();
OMElement bodyChild = mesb.getFirstElement();
OMElement remoteAddress = bodyChild.getFirstChildWithName(new QName(
"http://YourNameSpaceURI",
"remoteAddress"));
String remoteAddressStr = remoteAddress.getText();