2011-09-05 4 views
2

wsimport를 사용하여 웹 서비스 프록시를 만들려고하지만 충돌 때문에 오류가 발생합니다. "두 가지 선언으로 인해 ObjectFactory 클래스에서 충돌이 발생합니다."Java EE 웹 서비스 : 명명 충돌

Webservices가있는 두 개의 EJB가 한쪽 귀에 있습니다. 둘 다 동일한 이름과 매개 변수를 가진 메소드를가집니다. 각 WS에는 자체 targetnamespace가 있습니다.

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) { ... } 
} 
,536,913,632 10

응용 프로그램을 Weblogic 서버에 배포하면 첫 번째 웹 서비스는 WS B의 xml 선언을 가져 와서 메시지 유형으로 사용합니다. (A)의

WSDL :

<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 : 각 WS는 자신의 messagetypes의 정의하는 방법은

<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 프록시를 만들려면 어떻게해야합니까? (나는 그들을 다른 Java EE 응용 프로그램으로 분리하고 싶지 않습니다.)

+0

내 대답은 아래에 도움이되는 경우 체크 표시를 클릭하고 정답으로 "동의"경우 크리스, 그것은 멋진 것입니다. 이렇게 할 때 Stackoverflow 평판 포인트를 얻습니다. – twindham

답변

1

나는 내가 한 것과 비슷한 문제가있을 것이라고 생각합니다. 그러나 나는 완전히 확신 할 수는 없기 때문에 이는 단지 추측 일뿐입니다.

일부 클래스 사용자 정의를 수행 한 바인딩 파일에서 위의 예에서와 같이 단 하나의 wsdl 파일에서 참조 된 여러 스키마에서 일치하는 이름을 가진 요소 및 complexTypes로 문제점을 해결했습니다. XSD = 1에서

당신은 XSD = 2에 당신은 ... 나는 내 바인딩 파일에서이 같은 것을 사용

을이 문제를 해결하기 위해, 그래서

<xs:element name="getId" ...> 

을 가지고

<xs:complexType="getId"> and <xs:element name="getId" ...> 

을 가지고

<jxb:bindings version="2.0" 
      xmlns:jxb="http://java.sun.com/xml/ns/jaxb" 
      xmlns:xs="http://www.w3.org/2001/XMLSchema"> 
    <jxb:bindings schemaLocation="http://192.168.178.105:7001/BWebService/AWebService?xsd=1" node="//xs:element[@name='getId']"> 
     <jxb:class name="getIdElement"></jxb:class> 
    </jxb:bindings> 
</jxb:bindings> 

이것은 동일한 이름을 가진 내 문제를 해결했습니다. 유형요소을 입력하십시오. 네임 스페이스가 다른 두 개의 xsd 파일에서 여러 요소에 대해 동일한 이름을 사용하기 때문에이 문제가 도움이되는지 확실하지 않습니다.

가능한 충돌 문제 및 해결 방법에 대한 더 많은 정보가 여기 있습니다 ...http://goo.gl/vlQe3

행운을 빕니다, TW