maven을 통해 CXF에서 wsdl2java를 사용하여 웹 서비스 클라이언트를 생성하면 (wsimport와 비슷한 것을 생성) maven을 통해 서비스는 다음과 같은 코드로 시작됩니다.
@WebServiceClient(name = "StatusManagement",
wsdlLocation = "c:/some_absolute_path_to_a_wsdl_file.wsdl",
targetNamespace = "http://tempuri.org/")
public class StatusManagement extends Service {
public final static URL WSDL_LOCATION;
public final static QName SERVICE = new QName("http://tempuri.org/", "StatusManagement");
public final static QName WSHttpBindingIStatus = new QName("http://tempuri.org/", "WSHttpBinding_IStatus");
static {
URL url = null;
try {
url = new URL("c:/some_absolute_path_to_a_wsdl_file.wsdl");
} catch (MalformedURLException e) {
System.err.println("Can not initialize the default wsdl from c:/some_absolute_path_to_a_wsdl_file.wsdl");
// e.printStackTrace();
}
WSDL_LOCATION = url;
}
하드 코딩 된 절대 경로는 정말 짜증납니다. 생성 된 클래스는 내 컴퓨터 이외의 다른 컴퓨터에서는 작동하지 않습니다.
첫 번째 아이디어는 WSDL 파일 (가져 오는 모든 것, 다른 WSDL 및 XSD)을 jar 파일의 어딘가에 놓고 클래스 경로를 지정하는 것입니다. 그러나 우리는 이것을 피하고 싶습니다. 이 모든 것이 WSDL과 XSD에 기반한 CXF와 JAXB에 의해 생성되었으므로 런타임에 WSDL을 알 필요가 없습니다.
wsdlLocation 속성은 WSDL 위치를 재정의하기위한 것이며 (적어도이 위치에서 읽은 것임) 기본값은 ""입니다. maven을 사용 <wsdlLocation></wsdlLocation>
하고 있으므로 소스 생성기가 wsdlLocation을 비워 두도록 강제로 CXF 구성에 포함 하려고 시도했습니다. 그러나 이는 XML 태그가 비어 있기 때문에 단순히 무시합니다. 우리는를 사용하여 정말 못생긴 부끄러운 해킹을했습니다 <wsdlLocation>" + "</wsdlLocation>
.
다른 장소도 변경됩니다.
@WebServiceClient(name = "StatusManagement",
wsdlLocation = "" + "",
targetNamespace = "http://tempuri.org/")
public class StatusManagement extends Service {
public final static URL WSDL_LOCATION;
public final static QName SERVICE = new QName("http://tempuri.org/", "StatusManagement");
public final static QName WSHttpBindingIStatus = new QName("http://tempuri.org/", "WSHttpBinding_IStatus");
static {
URL url = null;
try {
url = new URL("" + "");
} catch (MalformedURLException e) {
System.err.println("Can not initialize the default wsdl from " + "");
// e.printStackTrace();
}
WSDL_LOCATION = url;
}
그래서 내 질문은 :
모든 클래스가 CXF 및 JAXB에 의해 생성 된 경우에도 실제로 WSDL 위치가 필요합니까? 그렇다면 왜 그렇습니까?
실제로 WSDL 위치가 필요하지 않은 경우 CXF가이를 생성하지 않고 완전히 피하지 않도록하는 적절하고 깨끗한 방법은 무엇입니까?
그 해킹으로 어떤 부작용이 생길 수 있습니까? 우리는 여전히 어떤 일이 일어나는지 확인하기 위해 테스트 할 수 없으므로 누군가 미리 말할 수 있다면 좋을 것입니다.
classpath:
경우<wsdlLocation...
줄 에서 생략 하십시오 .