2012-09-24 1 views
0

wsdl2java를 사용하여 서비스를 생성하고 있습니다. 세대에 대한 인수는 다음과 같습니다Axis2 구현 및 스텁 생성 문제

-p com.dummy.tst.service -u -f -sp -s -b -ssi -d xmlbeans -uri /some/path/service.wsdl -ss -g -sd -o /some/path/gen 

세대가 나는

<parameter name="ServiceClass">com.dummy.tst.service.TestSoapBindingImpl</parameter> 
다음 세대 디렉토리에 나는 방법의 목록 TestSoapBindingImpl.java있어

하지만 같은 선이있는 services.xml의 파일을 가지고 한 후에 모든 메소드는 다음과 같이 정의됩니다.

throw new java.lang.UnsupportedOperationException("Please implement " + this.getClass().getName() + "#myMethod"); 

실제로 구현 된 메소드가 들어있는 TestSoapBindingStub.java 파일이 있습니다. 1 축에는 메소드 설명과 구현이있는 파일이 하나만 있었고 2 축에는 2 개의 파일이 있습니다.

이 파일들을 어떻게해야합니까? 기본 서비스 메소드 컨테이너 (services.xml의)로 지정된 Impl 파일에는 인형 만 포함되어 있으므로 배치 된 서비스를 사용할 수없고 Service.xml에서 TestSoapBindingImpl을 TestSoapBindingStub로 바꾸어도 원하는 결과가 나오지 않습니다.

답변

1

TestSoapBindingStub.java은 클라이언트 용입니다. 원격 시스템에서 웹 서비스를 호출하는 코드가 포함되어 있습니다.

서비스 측면에서 요청이 들어올 때마다 Axis2는 services.xml에 지정된 유형의 개체를 ServiceClass로 만듭니다. 그런 다음 클라이언트가 제공 한 개체를 사용하여 ServiceClass 개체에서 요청 된 함수를 호출합니다.

wsdl2java에 의해 생성 된 코드를 사용하면 서비스 호출시마다 om.dummy.tst.service.TestSoapBindingImpl 유형의 객체가 생성됩니다.이 객체는 각 호출에 대해 예외를 발생시킵니다. 근무 서비스를 만드는 데는 두 가지 접근 방법이 있습니다.

  1. 시작 지점에있는 파일 TestSoapBindingImpl.java을 사용할 수 있습니다. 각 기능에서 throws 라인을 제거하고 요청이 들어 오면 당신이 실제로 실행하고자하는 코드로 각 함수 본문을 작성하십시오.

  2. 또는, 당신은 출발점으로 services.xml를 사용할 수 있습니다. 자신의 클래스를 서비스 클래스로 정의하십시오. com.dummy.tst.service.TestSoapBindingImpl에 대한 참조를 자신의 서비스 클래스 이름에 대한 참조로 바꿉니다. wsdl2java는 서비스 클래스가 구현해야하는 인터페이스를 정의하는 TestSoapBindingSkeleton.java과 같은 파일을 생성했을 것입니다. 맞춤 서비스 클래스는이 인터페이스를 구현해야합니다.

제가 사용하고있는 프로젝트는 # 2 접근 방식을 사용하고 있습니다. 스켈레톤 인터페이스를 구현하는 자체 서비스 클래스를 작성합니다. 서비스를 AAR 파일로 패키징 할 때 AAR에 services.xml 파일을 포함시킵니다. 패키징 규칙은 생성 된 services.xml에 텍스트 대체를 수행하여 ServiceClass를 서비스 클래스의 이름으로 업데이트합니다.