2013-03-11 4 views
0

배경 :CXF에서 WSDL2Java의를 사용하여 웹 서비스 서버 구현을 생성

내가 이전에 경험 아파치 CXF 웹 서비스를 소비하는 작업을하지만 서비스 엔드 포인트 인터페이스 (SEI)를 생성하는 조금 새로운 오전 Apache CXF 배포판과 함께 제공되는 wsdl2java 도구를 사용하는 서비스 구현.

작업 :

나는 현재 외부 시스템에 의해 소비 될 SOAP 기반의 웹 서비스의 구현에 노력하고있다. 이미 메시지 (XSD)와 WSDL 파일을 정의했습니다. 나는 아파치 CXF에서 wsdl2java 도구를 사용하여 SEI 생성을 시도했다. SEI는 JAXB 유형을 입력 매개 변수로 올바르게 생성하고 유형을 웹 서비스 메소드에 리턴합니다.

서비스 구현 클래스에 대해 생성 된 코드를 살펴보면 javax.xml.ws.Service 클래스가 확장 된 것을 알 수 있습니다. 또한 메서드 이름에 "Soap12Http"가 추가 된 서비스 끝점 인터페이스의 메서드와 이름이 같은 많은 오버로드 된 메서드가 생성됩니다. 이러한 메소드 중 일부는 WebServiceFeature ... 기능 유형의 매개 변수를 사용하지만 다른 메소드는 매개 변수를 사용하지 않습니다. 예 :

public class Query extends Service { 

     @WebEndpoint(name = "product_query-soap12-http") 
    public IQuery getProductsSoap12Http(WebServiceFeature... features) { 
     return super.getPort(getProductsSoap12Http, IQuery.class,features); 
    } 
} 

* IQUERY가 서비스 엔드 포인트 인터페이스를

문제입니다 :

  1. 내가 대신 확장 모두 javax의 서비스 엔드 포인트 인터페이스를 구현하는 서비스 구현 클래스를 기대 하였다. xml.ws.Service. 이것은 유효한 기대입니까?
  2. 서비스 구현 클래스가 서비스 끝점 인터페이스에서 메서드를 구현할 것으로 예상했습니다. 이것은 유효한 기대입니까?
  3. 또한 wsdl2java 명령에 클래스 파일로 생성하는 대신 JAXB POJOS 용 jar 생성을 요청할 수 있는지 알고 싶습니다.

답변

0

1과 2의 경우 대답은 아니오입니다. 생성 된 XXXXService 클래스는 WSDL에있는 다양한 SEI의 프록시 용 팩토리입니다. wsdl의 각 엔드 포인트/바인딩/포트 유형 조합은 특정 SEI의 인스턴스를 리턴하기 위해 Service 오브젝트에 일련의 "getXYZPort (...)"호출을 야기합니다.

3의 경우 -clientjar 옵션이 지난 주에 cxf의 도구에 추가되었습니다 (아직 릴리스되지 않았고 최신 스냅 샷이 필요함). 필요한 항목에 근접 할 수 있습니다.

+0

IQuery를 구현하고 웹 서비스 메서드를 정의하는 자체 클래스를 수동으로 작성해야하거나 생성 된 서비스 구현 클래스를 웹 서비스 구현으로 직접 사용해야합니까? – CKing