背景:我正在开发通过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以获得我需要的输出?非常感谢任何帮助