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

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-08-12 11:00:12  来源:igfitidea点击:

how to get child element from SOAP body?

javasoap

提问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();