带有“任何xml”主体的Apache CXF的WSDL文件

时间:2011-05-19 02:04:19

标签: soap wsdl cxf

背景:我正在开发通过WS-Management协议进行通信的Web服务。来自http://schemas.xmlsoap.org/ws/2005/06/management/wsman.wsdl的原始WSDL看起来像:

<xs:complexType name="SampleResourceType">
  <xs:sequence>
     <xs:element name="PropertyA" type="xs:string"/>
     <xs:element name="PropertyB" type="xs:int"/>
  </xs:sequence>
</xs:complexType>
<xs:element name="SampleResource" type="tns:SampleResourceType"/>

<wsdl:message name="PutMessage">
  <wsdl:part name="Body" element="tns:SampleResource"/>
</wsdl:message>

此WSDL适用于Apache CXF 2.4.0。

我的目标: 将SampleResource定义替换为其他以使操作处理任何资源(XML)。我想创建用于SOAP输出的操作的WSDL文件:

<soap:Envelope>
  <soap:Body>
    <SomeXmlDocument></SomeXmlDocument>
  </soap:Body>
</soap:Envelope>

SomeXmlDocument在这里意味着在运行时定义的任何XML文档。 现在的问题CXF总是从WSDL中放入预定义的名称。 我将在示例中展示:

我正在使用以下命令:wsdl2java.bat -fe jaxws21 -d gen -exsh true -verbose file.wsdl

如果我使用wsdl:

  <xs:complexType name="CIMObjectType">
    <xs:sequence>
      <xs:any namespace="##other" minOccurs="0" processContents="lax"/> 
    </xs:sequence>
  </xs:complexType>
  <xs:element name="CIMObject" type="tns:CIMObjectType"/>

  <wsdl:message name="GetResponseMessage">
     <wsdl:part name="Body" element="tns:CIMObject"/>
  </wsdl:message>

输出如下:

<soap:Body>
  <ns8:CIMObject>
    <XXX>
      <DeviceID>XXX:YYY</DeviceID>
    </XXX>
  </ns8:CIMObject>
</soap:Body>

如果我使用:

  <xs:complexType name="CIMObjectType">
    <xs:sequence>
      <xs:any namespace="##other" minOccurs="0" processContents="lax"/> 
    </xs:sequence>
  </xs:complexType>
  <xs:element name="CIMObject" type="tns:CIMObjectType"/>

  <wsdl:message name="GetResponseMessage">
     <wsdl:part name="Body" type="tns:CIMObjectType"/>
  </wsdl:message>

输出如下:

<soap:Body>
  <Body>
    <XXX>
      <DeviceID>XXX:YYY</DeviceID>
    </XXX>
  </Body>
</soap:Body>

但我需要:

<soap:Body>
    <XXX>
      <DeviceID>XXX:YYY</DeviceID>
    </XXX>
</soap:Body>

所以,问题是:如何修改WSDL以获得我需要的输出?非常感谢任何帮助

0 个答案:

没有答案