WSDL被修改为包含复杂类型,现在请求未正确编码

时间:2013-07-30 16:08:28

标签: xml web-services wsdl cobol cics

我有来自第三方服务的原始wsdl。 简化。

<s:element name="ProcessRequest">
  <s:complexType>
     <s:sequence>
       <s:element minOccurs="0"  maxOccurs="1" name="strXMLInput" type="s:string"/>              
     </s:sequence>
  </s:complexType>
  </s:element>

我已经修改了CICS Web Service Assistant,它生成一个COBOL副本来表示应该发送给服务的xml。

简化。

<s:element name="ProcessRequest">
    <s:complexType>
    <s:sequence>
        <s:element  name="strXMLInput" >
            <s:complexType>
                <s:sequence>
                 <s:element name="ACORD">
                    <s:complexType>
                    <s:sequence>
                     <s:element name="SignonRq">
                      <s:complexType>
                        <s:sequence>
                                        <s:element name="CustLoginId">
                             <s:simpleType>
                                 <s:restrictionbase="s:string"  >
                                  <s:length value="10"/>
                                       </s:restriction>
                            </s:simpleType>
                            </s:element>    

我已经更改了wsdl,所以我的字帖将包含所有元素,以便将正确的ACORD xml发送到服务,而不是在cobol中构建冗长的字符串。 使用WireShark我捕获了服务请求并且完全没有编码文档xml,正确的请求是

    <ProcessRequest><strXMLInput>&gt:Acord....etc,

但我的mod正在发送

     <ProcessRequest><strXMLInput><Acord....etc.//actual doc xml 

无论如何我可以使用扩展的wsdl使这个工作,让大型机知道strXMLInput仍然是一个字符串,但有孩子,或任何其他想法?感谢...

1 个答案:

答案 0 :(得分:2)

您希望将XML嵌入SOAP数据流中的项目中。这需要CDATA部分。 CICS TS版本4不直接支持这一点,我不确定第5版。

我相信你可以创建XML-aware application并更接近你想要的结果。

更新

我误解了你在做什么,这是请求者而不是提供者,对吗?如果是这种情况,那么我相信您需要直接链接到DFHPIRT。在我指出的Creating an XML-aware service requester application之后,我们在主题中介绍了它。