【问题标题】:Unmarshalling Optional Parameter in Jax-WS在 Jax-WS 中解组可选参数
【发布时间】:2015-02-17 07:09:49
【问题描述】:

当我在soap UI中使用以下请求时,一切正常:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:_0="http://types.kamal.com/5_0/">
   <soapenv:Header/>
   <soapenv:Body>
      <_0:getNumberOfMatches>
         <Id>XXX</Id>
         <erPassword>XXX</erPassword>
         <name>KOL</name>
     <timing>
         <start>XXXX</start>
     </timing>      
      </_0:getNumberOfMatches>
   </soapenv:Body>
</soapenv:Envelope>

如果我在根级别 &lt;abc&gt;1&lt;/abc&gt; 传递一个元素,它仍然可以正常工作。请求变成了这样。

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:_0="http://types.kamal.com/5_0/">
   <soapenv:Header/>
   <soapenv:Body>
      <_0:getNumberOfMatches>
         <Id>XXX</Id>
         <erPassword>XXX</erPassword>
         <name>KOL</name>
     <timing>
         <start>XXXX</start>
     </timing>
     <abc>1</abc>   
      </_0:getNumberOfMatches>
   </soapenv:Body>
</soapenv:Envelope>

但是,如果我在计时元素下添加这个标签 &lt;abc&gt;1&lt;/abc&gt;,它就会开始给我 Un-Marshaling 异常。

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:_0="http://types.kamal.com/5_0/">
   <soapenv:Header/>
   <soapenv:Body>
      <_0:getNumberOfMatches>
         <Id>XXX</Id>
         <erPassword>XXX</erPassword>
         <name>KOL</name>
     <timing>
         <start>XXXX</start>
         <abc>1</abc>
     </timing>      
      </_0:getNumberOfMatches>
   </soapenv:Body>
</soapenv:Envelope>

如果有人对 JAX-WS 使用的 Unmarshalling 机制有任何想法。 以及为什么它在父级工作并且在嵌套标签的情况下停止工作。

【问题讨论】:

  • 你得到了什么异常?
  • &lt;soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"&gt; &lt;soap:Body&gt; &lt;soap:Fault&gt; &lt;faultcode&gt;soap:Client&lt;/faultcode&gt; &lt;faultstring&gt;Unmarshalling Error: unexpected element (uri:"", local:"abc"). Expected elements are &amp;lt;{}start&gt;&lt;/faultstring&gt; &lt;/soap:Fault&gt; &lt;/soap:Body&gt; &lt;/soap:Envelope&gt;

标签: java soap jaxb jax-ws


【解决方案1】:

请从您的 wsdl 中确认,您在父级是否有特殊的“标签”?

<xs:any namespace="##other" />

这个xmlAnyElement的存在可能是父&lt;getNumberOfMatches&gt;接受新元素的原因。

另一方面,当您将新的&lt;abc&gt; 标记放入&lt;timing&gt; 标记时,它不起作用。因为&lt;timing&gt; 标签不会在 wsdl 中定义xmlAnyElement

你可以在这里找到详细的工作:http://www.w3schools.com/schema/schema_complex_any.asp

如果这解决了您的问题,请告诉我。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-08
    • 1970-01-01
    • 1970-01-01
    • 2012-10-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多