2015-01-05 1 views
4

을 사용자가wsimport의 클라이언트 - 나는 JAX-WS의 웹 서비스를위한 클라이언트 스텁을 생성하기 위해 wsimport의를 사용하고 여러 패키지 이름

wsimport 패키지의 이름을 사용자 정의 할 수 있습니다 -p 옵션이 호출합니다.

예 : WSDL의 네임 스페이스가 com.abc 인 경우 -p com.pqr 명령 줄을 사용하여 wsimport을 호출하여 com.abc를 com.pqr로 대체 할 수 있습니다.

그러나 wsdl에서 하나의 네임 스페이스 만 사용 된 경우에만 정상적으로 작동합니다.
wsdl에 여러 개의 네임 스페이스가있는 경우 각각의 패키지 이름을 다른 패키지 이름으로 바꿀 수있는 방법이 있습니까?

예 : 네임 스페이스 com.abc.s1이 네임 스페이스 com.pqr.s1 & 네임 스페이스 com.abc.s2로 대체되도록하려면 네임 스페이스 com.pqr.s2로 바꿉니다.

내가 wsimport -p com.pqr.s1를 사용하는 경우, 그것은

내가 원하는 것을 얻을 수있는 방법이 있나요 com.pqr.s1에 모든 생성 된 클래스를두고?

+0

사용자 정의 jaxb 바인딩이 가능합니다. wsdl (또는 여기에있는 것과 비슷한 내용)을 게시하십시오. 이상적인 시나리오는 다양한 스키마가 별도의 xsds에있을 것이지만 나는 – kolossus

+0

@kolossus가 없다고 생각합니다. 스키마는 별도의 스키마에 있습니다. 그게 어떻게 도움이됩니까? – user93353

+0

이들을 별도의 파일에두면 Xpath가 복잡해 지거나 WSDL에 jax-b 바인딩 지정 문이 번들로 포함될 필요가 없습니다. – kolossus

답변

4

일반적으로 jax-b 바인딩 파일을 사용하여 지정된 XSD 또는 WSDL에 대한 비 정렬 프로세스를 사용자 정의합니다. 바인딩 언어는 스키마의 생성 된 패키지를 사용자 정의하기 위해 <package/> 지시어를 제공합니다.

을 감안할 때 별도의 도식, 별도의 파일에, 당신은 복합 바인딩이 그 같은 것을 살펴 보겠습니다 파일을 가질 수 있습니다 schemaLocation 개별 스키마 파일의 위치를 ​​참조합니다

<?xml version="1.0" encoding="UTF-8"?> 
<jaxb:bindings xmlns:jaxb="http://java.sun.com/xml/ns/jaxb" 
       xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
       jaxb:version="2.0"> 
    <jaxb:bindings schemaLocation="Flight.xsd" node="/xsd:schema"> 
    <jaxb:schemaBindings> 
     <jaxb:package name="travel.flight"/> 
    </jaxb:schemaBindings> 
    </jaxb:bindings> 
    <jaxb:bindings schemaLocation="Hotel.xsd" node="/xsd:schema"> 
    <jaxb:schemaBindings> 
     <jaxb:package name="travel.hotel"/> 
    </jaxb:schemaBindings> 
    </jaxb:bindings> 
</jaxb:bindings> 

, node이에 의미를 바인딩 선언이 적용될 XML 요소입니다. <jaxb:package/>은 출력 패키지의 이름을 정의합니다.

그런 다음 바인딩이 -b 지시어를 사용하여 wsimport의에 파일을 반영하며, 당신이 잘되어야

참조 : 내가 그것을했다

1

방법이며, 다음을 수행하여

첫 번째는 schema.xjc 파일

<?xml version="1.0" encoding="UTF-8"?> 
<jaxb:bindings xmlns:jaxb="http://java.sun.com/xml/ns/jaxb" 
       xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
       jaxb:version="2.0"> 
    <jaxb:bindings schemaLocation="YOUR_URL?wsdl#types?schema1"> 
     <jaxb:schemaBindings> 
      <jaxb:package name="your.package.name.schema1"/> 
     </jaxb:schemaBindings> 
    </jaxb:bindings> 
    <jaxb:bindings schemaLocation="YOUR_URL??wsdl#types?schema2"> 
     <jaxb:schemaBindings> 
      <jaxb:package name="your.package.name.schema2"/> 
     </jaxb:schemaBindings> 
    </jaxb:bindings> 
</jaxb:bindings> 

패키지 이름만큼 당신이

다음이 자바의 모든 예약 된 키워드를 포함하지 않는 한, 당신이 원하는 무엇이든 할 수 있습니다를 만들 wsimport.bat 스크립트를 작성하여 원하는 위치에 패키지 및 코드를 생성하십시오. 당신이 CD를 사용하지 않으려면

cd C:\YOUR\PATH\TO\PLACE\THE\PACKAGES 
wsimport -keep -verbose -b "C:\YOUR\PATH\TO\schema.xjb" YOUR_URL?wsdl 
pause 

, 당신은 wsimport의를 넣을 수 있습니다.

-keep -verbose없이 실행하면 패키지 만 생성되고 .java 파일은 생성되지 않습니다.

-b는 생성시 schema.xjc가 사용됨을 확인합니다.