【问题标题】:Webservice-request with array带有数组的 Web 服务请求
【发布时间】:2011-07-12 10:16:08
【问题描述】:

我有一个 Web 服务,它接受一个包含 6 个字符串的 RequestDTO。在测试 web 服务时,我只需发送一个这样的 XML,它就可以正常工作:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"   
xmlns:java="java:dk.thg.fll" 
xmlns:java1="java:dk.thg.common">
<soapenv:Header/>
<soapenv:Body>
  <web:service>
     <web:request>
        <java:request>
           <java1:Id>1</java1:Id>
           <java1:User>anton</java1:User>
        </java:request>
        <java:ms>4453</java:ms>
        <java:element>GG</java:element>
        <java:service>L</java:service>
        <java:data><![CDATA[ <data><task><type>T</type><action>A</action> </task></data> ]]></java:data>
     </web:request>
  </web:service>
</soapenv:Body>
</soapenv:Envelope>

我现在的问题是我必须创建一个可以处理一组请求的网络服务。我的想法是简单地拥有一组 RequestDTO。这意味着新的 Web 服务采用 MultiRequestDTO,其中包含一组 RequestDTO。

但是 XML 应该是什么样子的呢? - 当我使用 SoapUI 进行测试时,它会自动生成请求 xml,这就是它所说的我的新 Web 服务 XML 的样子:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" 
xmlns:java="java:dk.thg.fll" 
xmlns:java1="java:dk.thg.common">
<soapenv:Header/>
<soapenv:Body>
  <web:service>
     <web:multiRequest>
        <java:request>
           <java1:Id>?</java1:Id>
           <java1:User>?</java1:User>
        </java:request>
        <java:requests/>
     </web:multiRequest>
  </web:service>
</soapenv:Body>
</soapenv:Envelope>

发送请求时(我的数组)应该是什么样子?

我尝试简单地从第一个 XML 中复制内容(复制了标签),但没有成功..

谁能帮忙?

* 编辑 * - 请求

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:java="java:dk.thg.fll" xmlns:java1="java:dk.thg.common">
<soapenv:Header/>
<soapenv:Body>
  <web:service>
     <web:multiRequest>
        <java:requestInfo>
           <java1:Id>10</java1:Id>
           <java1:User>1234</java1:User>
        </java:requestInfo>
        <java:requests>
        singleRequest
                <java:request>
                    <java1:Id>10</java1:Id>
                    <java1:User>789</java1:User>
                </java:request>
                <java:msisdn>4561814453</java:msisdn>
                <java:element>4453</java:element>
                <java:service>GG</java:service>
                <java:details><![CDATA[ <details><task><type>T</type><action>A</action> </task></details>]]></java:details>
    </java1:singleRequest>
    </java:requests>
     </web:multiRequest>
  </web:service>

这是我现在发送的内容.. 但是里面的所有值都没有收到,并且数组中的对象只包含空值。

【问题讨论】:

  • 在你的 XML 中哪个元素是数组类型?
  • java:requests 是数组类型
  • 是否正在使用任何 XSD 或元素在 wsdl 中声明?而对于您的 java:request 是 maxOccurs="unbounded" ?

标签: java xml web-services soap


【解决方案1】:
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"  xmlns:java="java:dk.thg.fll"  xmlns:java1="java:dk.thg.common"> 
<soapenv:Header/>
 <soapenv:Body> 
  <web:service>  
    <web:multiRequest>  
       <java:request>   
         <java1:Id>?</java1:Id>   
         <java1:User>?</java1:User>  
       </java:request>   
   <java:request>   
         <java1:Id>?</java1:Id>   
         <java1:User>?</java1:User>  
       </java:request>     
  <java:requests/>  
  <java:request>   
         <java1:Id>?</java1:Id>   
         <java1:User>?</java1:User>  
       </java:request>   
  </web:multiRequest> 
  </web:service> </soapenv:Body> 
</soapenv:Envelope>

如果你想触发多个 java:request,你的 XML 请求应该是这样的

【讨论】:

  • 可以添加多个 java:request 并在 SOAPUI 上触发
  • 我收到以下错误消息:原因:com.bea.xml.XmlException: required soap array type not present
  • 是的,你的 java:request 是否有 maxOccurs="unbounded"?你能分享你的 WSDL 吗?
  • 嗨.. 是的 java:requests 有 maxOccurs="unbounded"
  • 好吧,我认为您的 web:multirequest 应该采用 java:request 数组类型,因此 maxOccurs="unbounded" 将适用于 web:multirequest 而不是 java:request。
猜你喜欢
  • 2017-03-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多