我正在编写一个利用第三方两个独立WSDL的客户端。这两个WSDL具有完全相同的名称空间。因此,我创建了绑定文件,将从两个WSDL生成的对象放入单独的程序包中以避免冲突。但是,这两个WSDL之间有一些共同的元素,它们具有完全相同的定义。最好不要将这些对象生成到单独的程序包中,因为我想共享它们。我一直找不到使用绑定文件执行此操作的任何方法。我得到的最接近的结果是将这些共享元素从WSDL中拉出,并将它们放在新的XSD中,更改此XSD的targetNamespace,然后在绑定文件中定位该名称空间以将其放入另一个包中。这种方法的问题在于,现在生成的公共对象的名称空间有所不同,因此在调用实际服务时无法正确序列化。
有问题的共享元素如下:
<xs:complexType name="OperationResult">
<xs:sequence>
<xs:element name="MessageID" nillable="true" type="xs:string"/>
<xs:element name="Results" nillable="true" type="tns:ArrayOfCommandResult"/>
</xs:sequence>
</xs:complexType>
<xs:element name="OperationResult" nillable="true" type="tns:OperationResult"/>
<xs:complexType name="ArrayOfCommandResult">
<xs:sequence>
<xs:element minOccurs="0" maxOccurs="unbounded" name="CommandResult" nillable="true" type="tns:CommandResult"/>
</xs:sequence>
</xs:complexType>
<xs:element name="ArrayOfCommandResult" nillable="true" type="tns:ArrayOfCommandResult"/>
<xs:complexType name="CommandResult">
<xs:sequence>
<xs:element minOccurs="0" name="EntityID" type="xs:int"/>
<xs:element name="EntityType" nillable="true" type="xs:string"/>
<xs:element minOccurs="0" name="ExchangeID" nillable="true" type="xs:string"/>
<xs:element name="Code" nillable="true" type="xs:string"/>
<xs:element name="Reason" nillable="true" type="xs:string"/>
<xs:element minOccurs="0" name="Description" nillable="true" type="xs:string"/>
</xs:sequence>
</xs:complexType>
<xs:element name="CommandResult" nillable="true" type="tns:CommandResult"/>
,它们只是在
<xs:schema elementFormDefault="qualified" targetNamespace="http://schemas.mypartnercompany.com/stuff/2013/06"
xmlns:xs="http://www.w3.org/2001/XMLSchema">
是否可以做些什么来使这些通用对象生成到单独的程序包中,以便我可以在两个服务之间共享它们而不必自己更改名称空间?