Я пытаюсь создать прокси Web-сервисов с помощью wsimport, но получаю сообщение об ошибке из-за конфликта.«Два объявления вызывают конфликт в классе ObjectFactory.»
У меня есть два EJB-компонента с Web-сервисами, развернутыми в одно ухо.Оба имеют метод с одинаковым именем и параметрами.Каждый WS имеет свое собственное пространство имен назначения.
SEI WS A:
@Local
@SOAPBinding(style = SOAPBinding.Style.DOCUMENT, use = SOAPBinding.Use.LITERAL, parameterStyle = SOAPBinding.ParameterStyle.WRAPPED)
@WebService(name = "AService", targetNamespace = "http://example.com/bla/a")
public interface ASEI {
@WebMethod
@WebResult(name = "erpId")
public Long getId(@WebParam(name = "gid")
Long gid);
}
WebService A:
@Stateless
@WebService(serviceName = "AWebService",
endpointInterface = "foo.endpointinterfaces.ASEI",
targetNamespace = "http://example.com/bla/a")
@BindingType(SOAPBinding.SOAP12HTTP_BINDING)
public class AWebService implements ASEI {
public Long getId(Long gid) { ... }
}
SEI WS B:
@Local
@SOAPBinding(style = SOAPBinding.Style.DOCUMENT, use = SOAPBinding.Use.LITERAL, parameterStyle = SOAPBinding.ParameterStyle.WRAPPED)
@WebService(name = "BService", targetNamespace = "http://example.com/bla/b")
public interface BSEI {
@WebMethod
@WebResult(name = "erpId")
public Long getId(@WebParam(name = "gid")
Long gid);
}
Webservice B:
@Stateless
@WebService(serviceName = "BWebService",
endpointInterface = "foo.endpointinterfaces.ASEI",
targetNamespace = "http://example.com/bla/b")
@BindingType(SOAPBinding.SOAP12HTTP_BINDING)
public class BWebService implements BSEI {
public Long getId(Long gid) { ... }
}
Когда я развертываю приложение на своем сервере Weblogic, первые Webservices импортируют объявления XML WS B и используют их для типов сообщений.
WSDL A:
<definitions targetNamespace="http://example.com/bla/a" name="AWebService" xmlns:soap12="http://schemas.xmlsoap.org/wsdl/soap12/" xmlns:tns="http://example.com/bla/a" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://schemas.xmlsoap.org/wsdl/">
<types>
<xsd:schema>
<xsd:import namespace="http://example.com/bla/b" schemaLocation="http://192.168.178.105:7001/BWebService/AWebService?xsd=1"/>
</xsd:schema>
<xsd:schema>
<xsd:import namespace="http://example.com/bla/a" schemaLocation="http://192.168.178.105:7001/AWebService/AWebService?xsd=2"/>
</xsd:schema>
</types>
<message name="getId">
<part name="parameters" element="tns:getId"/>
</message>
...
XSD = 1:
<xs:schema version="1.0" targetNamespace="http://example.com/bla/b" xmlns:tns="http://example.com/bla/b" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="getId" type="tns:getId"/>
<xs:complexType name="getId"> ... </xs:complexType>
...
XSD = 2:
<xs:schema version="1.0" targetNamespace="http://example.com/bla/a" xmlns:tns="http://example.com/bla/a" xmlns:ns1="http://example.com/bla/b" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:import namespace="http://example.com/bla/b" schemaLocation="http://192.168.178.105:7001/AWebService/AWebService?xsd=1"/>
<xs:element name="getId" nillable="true" type="ns1:getId"/>
...
Есть ли способ, которыйкаждый WS определяет свои собственные типы сообщений?Или что еще я могу сделать, чтобы создать прокси WS?(Я не хочу разделять их на разные Java EE-приложения.)