문제는 나는 client 를 구축하는 데 필요한 파일 I& # 39 m, 웹 서비스를 제공한. # 39, ve i& 로컬 파일 시스템에서 파일을 저장할 수 있으며, 이 파일 및 폴더, 파일 시스템에 WSDL 자꾸 올바른 모든 것이 좋다. When I 배포하십시오 redhat. WSDL 분리하십시오 프록시 서버 또는 파일 시스템에서 폴더에 can& # 39, t groupx WSDL 및 다 오류가 발생했습니다. # 39, ve 압수수색을 i& 웹 및 I& # 39, ve 늑대굴에서 다음 포스트 아직이라구요 I& (make it work: # 39 m 수 없었습니다. https://stackoverflow.com/questions/764772/jax-ws-loading-wsdl-from-jar http://www.java.net/forum/topic/glassfish/metro-and-jaxb/client-jar-cant-find-local-wsdl-0 http://blog.vinodsingh.com/2008/12/locally-packaged-wsdl.html
@WebServiceClient(name = "SOAService", targetNamespace = "http://soaservice.eci.ibm.com/", wsdlLocation = "file:/C:/local/path/to/wsdl/SOAService.wsdl")
public class SOAService
extends Service
{
private final static URL SOASERVICE_WSDL_LOCATION;
private final static Logger logger = Logger.getLogger(com.ibm.eci.soaservice.SOAService.class.getName());
static {
URL url = null;
try {
URL baseUrl;
baseUrl = com.ibm.eci.soaservice.SOAService.class.getResource(".");
url = new URL(baseUrl, "file:/C:/local/path/to/wsdl/SOAService.wsdl");
} catch (MalformedURLException e) {
logger.warning("Failed to create URL for the wsdl Location: 'file:/C:/local/path/to/wsdl/SOAService.wsdl', retrying as a local file");
logger.warning(e.getMessage());
}
SOASERVICE_WSDL_LOCATION = url;
}
public SOAService(URL wsdlLocation, QName serviceName) {
super(wsdlLocation, serviceName);
}
public SOAService() {
super(SOASERVICE_WSDL_LOCATION, new QName("http://soaservice.eci.ibm.com/", "SOAService"));
}
/**
* @return
* returns SOAServiceSoap
*/
@WebEndpoint(name = "SOAServiceSOAP")
public SOAServiceSoap getSOAServiceSOAP() {
return super.getPort(new QName("http://soaservice.eci.ibm.com/", "SOAServiceSOAP"), SOAServiceSoap.class);
}
/**
* @param features
* A list of {@link javax.xml.ws.WebServiceFeature} to configure on the proxy. Supported features not in the <code>features</code> parameter will have their default values.
* @return
* returns SOAServiceSoap
*/
@WebEndpoint(name = "SOAServiceSOAP")
public SOAServiceSoap getSOAServiceSOAP(WebServiceFeature... features) {
return super.getPort(new QName("http://soaservice.eci.ibm.com/", "SOAServiceSOAP"), SOAServiceSoap.class, features);
}
}
< br>; 이건 내 코드를 사용하여 프록시:
WebServiceClient annotation = SOAService.class.getAnnotation(WebServiceClient.class);
// trying to replicate proxy settings
URL baseUrl = com.ibm.eci.soaservice.SOAService.class.getResource("");//note : proxy uses "."
URL url = new URL(baseUrl, "/WEB-INF/wsdl/client/SOAService.wsdl");
//URL wsdlUrl = this.getClass().getResource("/META-INF/wsdl/SOAService.wsdl");
SOAService serviceObj = new SOAService(url, new QName(annotation.targetNamespace(), annotation.name()));
proxy = serviceObj.getSOAServiceSOAP();
/* baseUrl;
//classes\com\ibm\eci\soaservice
//URL url = new URL(baseUrl, "../../../../wsdl/SOAService.wsdl");
proxy = new SOAService().getSOAServiceSOAP();*/
//updating service endpoint
Map<String, Object> ctxt = ((BindingProvider)proxy ).getRequestContext();
ctxt.put(JAXWSProperties.HTTP_CLIENT_STREAMING_CHUNK_SIZE, 8192);
ctxt.put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY, WebServiceUrl);
Wsdl 의 web-inf / wsdl / 클라이언트 / 소이저비스 복제본이므로 netbeans put a # 39, 그래서 don& 추가하여 META-INF 너무 싶지 않다. It 서비스 및 바이로우 들어 있는 파일 시스템 클래스는 WEB-INF/classes/com/ibm/eci/soaservice/ 가변적입니다 전체 경로를 (c:\path\to\the\project.\soaservice). 위의 코드는 의문이 오류:
>. 자바스.1 레비스트웹저비스엑스티온: Wsdl http://support. 액세스하려면 못했습니다. file:/WEB-INF/wsdl/client/SOAService.wsdl. 함께 실패했다. \WEB-INF\wsdl\client\SOAService.wsdl (경로를 찾을 수 없습니다)
그래서 난 일단 불지옥으 스트로카션 업데이트하십시오 프록시 클래스를? 그럼 어떻게 하면 소이저비스 WEB-INF / classes / com 클래스를 검색할 수 있는 소이저비스 eci / / ibm / WSDL \WEB-INF\wsdl\client\SOAService.wsdl?
가장 좋은 방법은 jax-ws-catalog.xml 사용
Wsdl 파일을 컴파일할 때 현지 오버라이드합니다 迈向 설정되었습니다 WSDL 위치와 같은 일이
< pre>; http://localhost/wsdl/SOAService.wsdl < /pre>;
이 옵션을 wsdl 자바 컴파일러를 스트로카션 반군지역 이를 확인할 수 있습니다.
이렇게 하면 가상본 코드로부터 변경하십시오
static {
URL url = null;
try {
URL baseUrl;
baseUrl = com.ibm.eci.soaservice.SOAService.class.getResource(".");
url = new URL(baseUrl, "file:/C:/local/path/to/wsdl/SOAService.wsdl");
} catch (MalformedURLException e) {
logger.warning("Failed to create URL for the wsdl Location: 'file:/C:/local/path/to/wsdl/SOAService.wsdl', retrying as a local file");
logger.warning(e.getMessage());
}
SOASERVICE_WSDL_LOCATION = url;
}
수
static {
URL url = null;
try {
URL baseUrl;
baseUrl = com.ibm.eci.soaservice.SOAService.class.getResource(".");
url = new URL(baseUrl, "http://localhost/wsdl/SOAService.wsdl");
} catch (MalformedURLException e) {
logger.warning("Failed to create URL for the wsdl Location: 'http://localhost/wsdl/SOAService.wsdl', retrying as a local file");
logger.warning(e.getMessage());
}
SOASERVICE_WSDL_LOCATION = url;
}
Url 에 구성자를 file:// 디이브이 http://로 바뀌었습니다.
이제 jax-ws-catalog.xml. 오는 Jax-ws 는 jax-ws-catalog.xml 없이 그 위치에서 WSDL 불러오시길 시도하시겠습니까 < http://localhost/wsdl/SOAService.wsdl pre>; < /pre>; 및 장애 때문에, 그러한 WSDL 사용할 수 있습니다.
뿐만 아니라 jax-ws-catalog.xml 액세스하려고 할 때마다 jax-ws 맞추기바인딩 로칼에서 패키지된 WSDL 리디렉션할 수 있습니다, WSDL @ < http://localhost/wsdl/SOAService.wsdl pre>. /pre> <;).
<catalog xmlns="urn:oasis:names:tc:entity:xmlns:xml:catalog" prefer="system">
<system systemId="http://localhost/wsdl/SOAService.wsdl"
uri="wsdl/SOAService.wsdl"/>
</catalog>
Wsdl 에서 jax-ws 는 필요할 때 말하는 거지 너희는너희가 판매업체에서 로드하기에 < http://localhost/wsdl/SOAService.wsdl pre>; 이를 통해 이를 로컬 경로 wsdl/SOAService.wsdl. 로드할지 /pre> <;
지금 어디 넣을 wsdl/SOAService.wsdl 및 jax-ws-catalog.xml? # 39, s, t # 39 이 질문 isn& that& (the million dollar? Be in the jar 응용 프로그램의 META-INF 디렉터리 합니다.
그래서 이 같은 일이
< pre>; 압cd.자 Meta-inf _을 jax-ws-catalog.xml _을 wsdl _을 소이저비스트스들 _을 < /pre>;
이 방법은 고객이 해당 URL 에 무시하려면 don& # 39, t 갖추지 액세스하려면 프록시입니다. Wsdl 은 해당 JAR 파일 시스템 내에서 호조를 패스이므로 코드에서 직접 가지고 있으며, 않아도 됩니다.
Jax-ws-catalog.xml 대한 자세한 정보 http://jax-ws.java.net/nonav/2.1.2m1/docs/catalog-support.html
도움이 되길 바란다
우리가 경험한 것은 다른 클라이언트를 사용하여 프록시 코드를 작성하기 외곽진입 성공적으로 WS 우심포트 () 의 Ant, 표시됨과 Ant 작업을) 와 속성용 스트로카션 지정합니다.
<wsimport debug="true" keep="true" verbose="false" target="2.1" sourcedestdir="${generated.client}" wsdl="${src}${wsdl.file}" wsdlLocation="${wsdl.file}">
</wsimport>
지금까지 우리는 프로젝트의 실행하십시오 wsdl 스크립트입니다 달러 포함, 여러 보정됩니다 (스트라자피레} 값을 무중단으로 설정되는 스크램블된 /META-INF/wsdl/YourWebServiceName.wsdl 기준으로 자바수르스 위치 (또는 / src 방법에 따라 프로젝트에 설정할 수 있습니다). 이 과정에서 프로스 구축하십시오, WSDL 및 스즈데스 파일이 복사됩니다 위치 및 패키지된 in the JAR 파일. (유사한 이 솔루션은 설명자 바사카 위)
MyApp.jar
|__META-INF
|__wsdl
|__YourWebServiceName.wsdl
|__YourWebServiceName_schema1.xsd
|__YourWebServiceName_schmea2.xsd
참고: wsdl 파일을 상대치 세르렌시스 아니라 모든 임포트한 스즈데스 smartupdate 사용하는 http url:
<types>
<xsd:schema>
<xsd:import namespace="http://valueobject.common.services.xyz.com/" schemaLocation="YourWebService_schema1.xsd"/>
</xsd:schema>
<xsd:schema>
<xsd:import namespace="http://exceptions.util.xyz.com/" schemaLocation="YourWebService_schema2.xsd"/>
</xsd:schema>
</types>
/**
* This class was generated by the JAX-WS RI.
* JAX-WS RI 2.2-b05-
* Generated source version: 2.1
*
*/
@WebServiceClient(name = "YourService", targetNamespace = "http://test.webservice.services.xyz.com/", wsdlLocation = "/META-INF/wsdl/YourService.wsdl")
public class YourService_Service
extends Service
{
private final static URL YOURWEBSERVICE_WSDL_LOCATION;
private final static WebServiceException YOURWEBSERVICE_EXCEPTION;
private final static QName YOURWEBSERVICE_QNAME = new QName("http://test.webservice.services.xyz.com/", "YourService");
static {
YOURWEBSERVICE_WSDL_LOCATION = com.xyz.services.webservice.test.YourService_Service.class.getResource("/META-INF/wsdl/YourService.wsdl");
WebServiceException e = null;
if (YOURWEBSERVICE_WSDL_LOCATION == null) {
e = new WebServiceException("Cannot find '/META-INF/wsdl/YourService.wsdl' wsdl. Place the resource correctly in the classpath.");
}
YOURWEBSERVICE_EXCEPTION = e;
}
public YourService_Service() {
super(__getWsdlLocation(), YOURWEBSERVICE_QNAME);
}
public YourService_Service(URL wsdlLocation, QName serviceName) {
super(wsdlLocation, serviceName);
}
/**
*
* @return
* returns YourService
*/
@WebEndpoint(name = "YourServicePort")
public YourService getYourServicePort() {
return super.getPort(new QName("http://test.webservice.services.xyz.com/", "YourServicePort"), YourService.class);
}
/**
*
* @param features
* A list of {@link javax.xml.ws.WebServiceFeature} to configure on the proxy. Supported features not in the <code>features</code> parameter will have their default values.
* @return
* returns YourService
*/
@WebEndpoint(name = "YourServicePort")
public YourService getYourServicePort(WebServiceFeature... features) {
return super.getPort(new QName("http://test.webservice.services.xyz.com/", "YourServicePort"), YourService.class, features);
}
private static URL __getWsdlLocation() {
if (YOURWEBSERVICE_EXCEPTION!= null) {
throw YOURWEBSERVICE_EXCEPTION;
}
return YOURWEBSERVICE_WSDL_LOCATION;
}
}
아마도 이 도움이 될 수 없다. # 39 의 it& 그냥 다른 접근 방식을 사용하지 않는 " catalog"; 외곽진입.
'< 카탈로그화할 xmlns 를 = " urn:oasis:names:tc:entity:xmlns:xml:catalog";; = " 포지셔닝하십시오 system" >;; <, 시스템 시스템 id = " http://localhost/wsdl/yourwsdlname.wsdl"; 열린우리당 = " wsdl/yourwsdlname.wsdl"; />. '/catalog> <;
네 이제 패키지는 jar. S # 39 더 이상 지역 내 모든 패키지화되고 referenced 참조입니다 디렉터리인 it&.
봄 클래스 경로 프로토콜 사용하여 참조할 classpath 리소스에는 너희가운데 대한 사용 됩니다. 따라서, 이 경우 스트로카션 됩니다.
<wsdlLocation>classpath:META-INF/webservice.wsdl</wsdlLocation>
단, 표준 Java 비헤이비어를 아니다. 참고: http://docs.spring.io/spring/docs/current/spring-framework-reference/html/resources.html
문제는 여기에 대해서는 정확히 동일한 경식도 . 아니 무슨 짓을 해도 위의 예와 같은 위치를 변경하려면 내 WSDL 파일을 (emc 의 경우 웹 서버에서), 그것은 여전히 원래 위치를 참조하는 포함된 소스 트리에서 서버 프로세스.
내가 그 어리석은 리클레스 파일 및 수행됨 다시 한 번 기절 클라이언트 코드가, 모든 것이 완벽한 청소하십시오 작동됨 완전 좋아요!! 레돈쿠루스!!
이메프, 앤드루