2012-06-25 3 views
1

WSDL 버전마다 다른 SOAP 클라이언트 스텁이 생성됩니다. 이것은 SOAP 서버가 다른 버전의 웹 서비스를 가지고 있기 때문에 발생합니다. 웹 서비스 버전 1에 대한여러 SOAP 스텁 버전 관리

스텁은 soap.stubs.version2에서 버전 2 soap.stubs.version1 및 스텁에 포장되어 있습니다.

이것은 WSDL 버전 1의 MyStub가 버전 2의 MyStub과 다를 수 있다는 것을 의미합니다. MyStub 버전 2를 반환하고 버전 1의 MyStub 값을 보유하는 SOAP 메소드를 호출하면 ", XML 응답을 스텁의 특성에 올바르게 매핑 할 수 없기 때문입니다.

이 때문에 클래스 유형을 SOAP 서버와 연관시켜야합니다.

각 버전에 대한 논리를 복제하는 것은 단순히 불가능하다 :

if(SoapServer.version==1) 
{ 
    soap.subts.version1.MyStub result = SoapServer.getFoo(); 
    /* rest of the logic using result of type soap.subts.version1.MyStub */ 
} 
else if(SoapServer.version==2) 
{ 
    soap.subts.version2.MyStub result = SoapServer.getFoo(); 
    /* rest of the logic using result of type soap.subts.version2.MyStub */ 
} 

때마다 나는 새로운 스텁을 사용하는 모든 논리를 복제 할 필요가 최신 버전에 대한 스텁을 생성 할 것입니다. 때로는 변경되는 유일한 속성입니다.

내가 그 "클래스"에 대한 모든 로직을 다시 구현하지 않고 SOAP 서버에 따라 적절한 스텁을 사용하는 방법 등으로

?

는 내가 객체를 사용하여 생각하지만 그 경우의 충당 instanceof를 필요하고 캐스트 것이다.

답변

0

나는 자바 반사와 URLClassLoader의의 misck으로이 문제를 해결하기 위해 관리했습니다. 내가 basicly 한 일은이었다

  • 내가 올바른 메소드를 호출 반사를 사용하여 올바른 class 파일
  • 를로드 내가
  • 가 URLClassLoader의를 사용하여 subts를 가져올 수있는 위치에서 패키지 이름을 정의 서버 버전에 따라

이것은 플러그 앤 플레이 SOAP 서버가 다른 스텁 버전을 사용하는 경우에도 큰 이점이 있습니다. 버전간에 일정해야하는 유일한 방법은 메소드 이름이므로 Class.getMethod를 통해 가져올 수 있습니다.