2014-04-01 2 views
0

각각 자신의 WSDL 파일을 생성하지만 모두 동일한 프로젝트 & 웹 응용 프로그램에 포함 된 3 개의 Java JAX-WS 웹 서비스 집합을 만들었습니다.Webservice 네임 스페이스 공유

이들은 많은 요청/응답 객체를 공유합니다. 예를 들어 모든 응답 요청 객체 &은 BaseRequest 및 BaseResponse 클래스에서 상속됩니다.

C# .NET을 사용하여 클라이언트를 만들면 각 WSDL 파일에 대해 하나씩 여러 BaseRequest 및 BaseResponse 클래스가 만들어 지지만 실제로 공유 BaseRequest 및 BaseResponse 클래스 집합을 하나만 만들면됩니다.

내 웹 서비스를 모두 동일한 대상 네임 스페이스로 공유하면이 작업을 수행 할 수 있습니다. 내 질문은,이 허용 가능한 & (다른 WSDL 파일을 생성하는 여러 웹 서비스간에 동일한 네임 스페이스를 공유) 할 수 있습니까?

@WebService(name = "BasicServicePortType", targetNamespace = "http://com.vectren.ws.basic.impl") 
public interface BasicService 
{ 
    @ResponseWrapper(localName = "LogInResponseWrapper") 
    public LogInResponse logIn(@WebParam(name="request")LogInRequest request); 

    @ResponseWrapper(localName = "LogOutResponseWrapper") 
    public LogOutResponse logOut(@WebParam(name="request")LogOutRequest request); 
} 


@WebService(name = "ContentServicePortType", targetNamespace = "http://com.vectren.ws.content.impl") 
public interface ContentService 
{ 
    @ResponseWrapper(localName = "GetContentResponseWrapper") 
    public GetContentResponse getContentList(@WebParam(name="request")GetContentRequest request); 
} 

@WebService(name = "OutageServicePortType", targetNamespace = "http://com.vectren.ws.outage.impl") 
public interface OutageService 
{ 
    @ResponseWrapper(localName = "GetOutageNumbersResponseWrapper") 
    public GetOutageNumbersResponse getOutageNumbers(@WebParam(name="request")GetOutageNumbersRequest request); 

    @ResponseWrapper(localName = "GetOutageableAccountsByAccountNumbersResponseWrapper") 
    public GetOutageableAccountsResponse getOutageableAccountsByAccountNumbers(@WebParam(name="request")GetOutageableAccountsByAccountNumbersRequest request); 
} 

참고 : 요청/응답 모든 객체를 각각의 경우에이 같은 상속 "당신이 종류의 내 웹 서비스가 어떻게 보이는지의 아이디어를 얻을 수 있도록 여기에

몇 가지 예를 들어 자바 코드의 BaseRequest "/"BaseResponse "클래스가 있습니다. 예를 들어, LogInRequest, LogOutRequest, GetContentRequest, GetOutageNumbersRequest, & GetOutageableAccountsByAccountNumbersRequest 은 모두 BaseRequest에서 상속됩니다. 응답 객체에 대해서도 같은 생각입니다.

답변

1

그러나 실제로 원하는 것은 유형의 네임 스페이스가 동일하다는 것입니다.서비스의 네임 스페이스는 그다지 중요하지 않습니다. 유형에 공통 네임 스페이스가 있으면 어느 정도 공통성을 얻을 수 있습니다.

.NET에서는 말할 수 없지만 Java 세계에서는 wsimport 세 개의 개별 WSDL로 세 세트의 코드가 생성됩니다. 그러나 유형이 WSDL/스키마 전반의 공통 네임 스페이스에있는 경우 세 번 중 두 번에서 동일한 동일한 코드가 생성됩니다. 세 개의 WSDL에서 동일한 클라이언트 프로젝트 (jar, war 등)로 생성하면 코드의 공통 비트를 두 번 겹쳐 쓰게됩니다.

일반적인 클래스에서 특정 xml 네임 스페이스를 갖도록 주석을 추가 할 수 있습니다. 기억하지 못하면 생성 된 WSDL의 연관된 XSD 내의 서비스의 네임 스페이스에 선언되지 않게됩니다.

package com.example.services.base; 

@XmlRootElement 
@XmlType(namespace="http://services.example.com/base") 
public class BaseRequest { 
//... 
} 
관련 문제