2010-03-24 2 views
6

Maven의 소규모 멀티 모듈 프로젝트에서 일하고 있습니다. 우리는 Web Services를 사용하여 데이터베이스 레이어와 UI를 분리했습니다. jaxws-maven-plugin 덕택에 WSDL 및 WS 클라이언트 생성이 어느 정도 처리되었습니다. (플러그인은 본질적으로 wsgen과 wsimport를 감싸는 래퍼입니다.) 지금까지는 그렇게 좋았습니다.WSIT, Maven 및 wsimport - 함께 작동 할 수 있습니까?

그림은 WSIT 보안을 계층화하려고 할 때 문제가 발생합니다. NetBeans를 사용하면 보안 메타 데이터를 쉽게 생성 할 수 있지만 wsimport는 Basic-auth 수준 이상의 보안을 전혀 처리 할 수없는 것 같습니다. ,

<plugin> 
    <groupId>org.codehaus.mojo</groupId> 
    <artifactId>jaxws-maven-plugin</artifactId> 
    <version>1.10</version> 
    <executions> 
     <execution> 
      <goals> 
       <goal>wsimport</goal> 
      </goals> 
      <configuration> 
       <wsdlUrls> 
        <wsdlUrl>${basedir}/../WebService/target/jaxws/wsgen/wsdl/WebService.wsdl</wsdlUrl> 
       </wsdlUrls> 
       <packageName>com.yourcompany.appname.ws.client</packageName> 
       <sourceDestDir>${basedir}/src/main/java</sourceDestDir> 
       <destDir>${basedir}/target/jaxws</destDir> 
      </configuration> 
     </execution> 
    </executions> 
</plugin> 

내가 xauthFile 주변에 xadditionalHeaders를 재생하는 시도를 통해 javax.xml.ws.security.auth.username과 암호를 전달 :

는 여기에 메이븐 빌드하는 동안 wsimport의 호출의 현재, 불안 방법 args. 또한 추가 보안 정보가있는 Tomcat에서 생성 된 WSDL을 가리 키도록 명령 줄에서 wsimport를 사용하여 시도했습니다. 그러나 wsimport가 생성 한 파일의 구성을 전혀 변경하지 않는 것은 아닙니다.

내 질문에 WSIT 준수 클라이언트를 얻으려면 Maven과 jaxws 플러그인을 모두 버려야할까요? WSIT 클라이언트를 자동으로 생성하는 방법이 있습니까? 아니면 손으로 클라이언트를 생성해야합니까?

여기서 작성한 내용 외에 추가 정보가 필요한 경우 알려 주시기 바랍니다. Maven이 Metro를 배포 된 WAR 파일로 가져 오는 것이 기쁜 것처럼 보이기 때문에 Tomcat에 배포하고 있습니다.

미리 감사드립니다.

편집 : WSIT로 많은 경험을 한 후, 저에게 도움이되었습니다.

우선 Netbeans를 사용하여 WSIT 클라이언트를 생성하십시오. 테스트하여 작동하는지 확인한 다음 WSIT 구성 파일 (wsit-client.xml 및 [your web service name] .xml)을 WS 클라이언트 프로젝트의 META-INF 디렉토리로 이동합니다. 여기에 약간의 하드 코딩 된 종속 우리가 관리해야하는 것이있다, 분명히

<wsp:Policy wsu:Id="WebPortBindingPolicy"> 
    <wsp:ExactlyOne> 
     <wsp:All> 
      <sc:CallbackHandlerConfiguration wspp:visibility="private"> 
       <sc:CallbackHandler default="wsitUser" name="usernameHandler"/> 
       <sc:CallbackHandler default="changeit" name="passwordHandler"/> 
      </sc:CallbackHandlerConfiguration> 
      <sc:TrustStore wspp:visibility="private" location="C:\Apps\apache-tomcat-6.0.24\certs\client-truststore.jks" type="JKS" storepass="changeit" peeralias="xws-security-server"/> 
     </wsp:All> 
    </wsp:ExactlyOne> 
</wsp:Policy> 

:

프로젝트에 관련된 추가, 보안 관점에서, 웹 서비스 XML의 태그입니다 우리가 지을 때. 사용자, 암호, 트러스트 스토어의 위치 및 페트롤 륨은 모두 개발 기본값이며 시스템이 dev에서 테스트 및 생산으로 이동함에 따라 변경됩니다. 우리는 이것을 관리하기위한 몇 가지 전략을 가지고 놀고 있지만 허드슨에서는 각 환경에 맞게 환경 변수를 설정해야 할 것입니다.

Maven의 jaxws 플러그인 구성을 약간 변경하십시오. 빌드의 일부로 WSDL을 생성하므로 로컬로 참조 할 필요가 없습니다.

<plugin> 
    <groupId>org.codehaus.mojo</groupId> 
    <artifactId>jaxws-maven-plugin</artifactId> 
    <version>1.12</version> 
    <executions> 
     <execution> 
      <goals> 
       <goal>wsimport</goal> 
      </goals> 
      <configuration> 
       <wsdlUrls> 
        <wsdlUrl>${basedir}/../WebService/target/jaxws/wsgen/wsdl/WebService.wsdl</wsdlUrl> 
       </wsdlUrls> 
       <staleFile>${project.build.directory}/jaxws/stale/WebService.stale</staleFile> 
       <packageName>com.yourcompany.appname.ws.client</packageName> 
       <sourceDestDir>${basedir}/src/main/java</sourceDestDir> 
       <destDir>${basedir}/target/jaxws</destDir> 
      </configuration> 
      <id>wsimport-generate-WebService</id> 
      <phase>generate-sources</phase> 
     </execution> 
    </executions> 
    <dependencies> 
     <dependency> 
      <groupId>javax.xml</groupId> 
      <artifactId>webservices-api</artifactId> 
      <version>2.0-b30</version> 
     </dependency> 
    </dependencies> 
    <configuration> 
     <sourceDestDir>${project.build.directory}/generated-sources/jaxws-wsimport</sourceDestDir> 
     <xnocompile>true</xnocompile> 
     <verbose>true</verbose> 
     <extension>true</extension> 
    </configuration> 
</plugin> 

그리고 마지막으로, 물론, 웹 서비스를 호출 할 필요가 모든 프로젝트가 지하철 의존성이 제대로 설정되어 있는지 확인하십시오 : 여기에 우리의 WS 클라이언트 대상의 wsimport의 명령에 대한 플러그인 태그입니다.

답변

2

클라이언트 용 WSIT 구성 파일을 제공하지 않습니까? 정확히 wsimport에서 무엇을 기대합니까?

편집 : 묵시적으로, WSIT 문서 describes이 클라이언트 측 구성 파일 : wsit-client.xml{wsdl file name}.xml과 :

클라이언트를 실행하고,이 파일에 하나의 클래스 경로에 있어야합니다 classpath root (즉, build/classes) 또는 classpath root 아래의 META-INF 디렉토리에 있습니다.

Maven 프로젝트로 바꾸면이 파일의 원래 위치는 src/main/resources 또는 src/main/resources/META-INF 폴더가됩니다. 개인적으로, 나는 META-INF에 넣는 것을 선호하는 경향이 있습니다.

+0

"그저"부분 만 속임수입니다. 저는 오늘이 작업을 많이했고, WSIT 튜토리얼을 따라 NetBeans에 보안 WS 클라이언트를 만들 수있었습니다. 나는 아직도 Maven 프로젝트를 구성에 행복하게 사용할 수 없었지만, 나는 가깝다. 이것은 내 첫 번째 보안 웹 서비스이므로 계속 진행하면서 배우고 있습니다. 나는 아마 내가 어떻게했는지에 대한 자신 만의 답을 미니 튜토리얼로 제출할 것이고, 다른 사람들은 내가 겪었던 고통을 피할 수있을 것이다. 감사! – rtperson

+0

@rtperson WSIT가 사소한 것은 아니지만 wsimport 중에 어떤 일이 일어날 지 아직 예상하지 못했습니다. 클라이언트 측 WSIT 구성 파일을 제공하는 AFAIK는 클라이언트 아티팩트 생성에 영향을 미치지 않습니다. –

+0

파스칼은 조각들이 어떻게 어울리는 지 보았으므로 wsimport가 지금하고있는 것과는 다른 어떤 것도하지 않을 것이라는 것을 알고 있습니다. 그래서 과거를 지나갈 수있었습니다. 그러나 아직 Maven을 통해 안전한 WSIT 클라이언트를 만들 수는 없습니다. 지금 집에 있고 코드가 나 앞에 없지만 클라이언트 구성 파일은 META-INF에있는 두 개입니다. 맞습니까? wsit_client 구성 및 웹 서비스 설명자? (내 지식의 큰 차이를 용서하면 알 수 없으면 WSIT를 처음 구현합니다.) – rtperson

관련 문제