2010-03-24 25 views
6

Maven'de küçük-çok çok modüllü bir proje üzerinde çalışıyorum. UI'yi Web Hizmetleri'ni kullanarak veritabanı katmanından ayırdık ve jaxws-maven-plugin sayesinde WSDL ve WS istemcisinin oluşturulması bizim için az ya da çok ele alındı. (Eklenti esasen wsgen ve wsimport etrafındaki sarıcıdır.) Şimdiye kadar çok iyi.WSIT, Maven ve wsimport - Birlikte Çalışabilirler mi?

Sorun, WSIT güvenliğini resme katmaya çalıştığımda ortaya çıkıyor. NetBeans, güvenlik meta verilerini kolayca oluşturmamı sağlar, ancak wsimport, Temel güvenlik düzeyinin ötesinde bir şeyle başa çıkmaktan tamamen mahrum görünüyor. ,

<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> 

Ben xauthFile etrafında xadditionalHeaders oynarken denedi yoluyla javax.xml.ws.security.auth.username ve parola geçirerek:

İşte Maven inşa sırasında wsimport çağıran mevcut, güvensiz yol args. Ayrıca ek güvenlik bilgisine sahip olan Tomcat tarafından üretilen WSDL'ye işaret etmek için komut satırından wsimport kullanmayı denedim. Bununla birlikte, hiçbir şey, wsimport tarafından üretilen dosyaların kompozisyonunu hiç değiştirmiyor.

Buradaki sorum, WSIT uyumlu bir istemci almak için Maven'i ve jaxws eklentisini tamamen terkedemem mi? Otomatik olarak oluşturulacak bir WSIT istemcisi almanın bir yolu var mı? Yoksa müşteriyi el ile üretmeye mi ihtiyacım olacak?

Burada yazdıklarımın ötesinde herhangi bir ek bilgiye ihtiyacınız varsa bildirin. Tomcat'e konuşuyorum, ancak Maven'in dağıtılan WAR dosyasına Metro'yı çekmek için mutlu olduğu için bu bir sorun gibi görünmüyor.

Şimdiden teşekkürler!

DÜZENLEME: WSIT ile uğraştıktan sonra, işte benim için çalıştı.

Yeni başlayanlar için, bir WSIT istemcisi oluşturmak için Netbeans kullanın. Çalıştığından emin olmak için sınayın ve WSIT yapılandırma dosyalarını (wsit-client.xml ve [web hizmeti adınız] .xml) WS istemci projesinin META-INF dizinine taşıyın. Buraya biraz kodlanmış bağımlılıkları biz yönetmek için ihtiyaç duyacakları vardır Açıkçası

<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> 

:

projenizle ilgili toplama, güvenlik açısından, web hizmeti xml etiketi bizim inşa sırasında. Kullanıcı, parola, güvencenin konumu ve peeralias tüm geliştirme varsayılanlarıdır ve sistem geliştirmeden sınamaya ve üretime geçtikçe değişecektir. Bunu yönetmek için birkaç farklı stratejiyle uğraşıyoruz, ancak büyük olasılıkla Hudson'daki ortam değişkenlerini her bir ortama inşa etmek için ayarlayacağız.

Maven'in jaxws eklentisinin yapılandırması ile biraz uğraşın. WSDL'yi yapının bir parçası olarak üretiyoruz, bu yüzden yerel olarak referans göstermemize gerek yok.

<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> 

Ve son olarak, elbette, web hizmetleri aramanız gerekmektedir tüm projeler Metro bağımlılık düzgün bir şekilde kurulmuş olduğundan emin olun: İşte WS istemci hedefindeki wsimport komutu için eklenti etikettir.

cevap

2

istemci tarafı WSIT Yapılandırma Dosyalarını istemci için sağlamanız yeterli değil mi? wsimport'dan tam olarak ne bekliyorsunuz?

Düzenleme: zımni olarak WSIT belge describes iki istemci tarafı yapılandırma dosyaları: wsit-client.xml ve {wsdl file name}.xml ve:

istemcisi çalıştıran, bu dosyaları at, ya sınıf yolunda olması gerekir sınıf yolu kökü (yani, yapı/sınıflar) veya sınıf yolu kökü altındaki bir META-INF dizininde.

bir Maven projesi aktarırsak

, bu dosyalar için doğal konumu src/main/resources veya src/main/resources/META-INF klasör olacaktır. Şahsen, bunları META-INF'e koymayı tercih ederim.

+0

Bunun "sadece" kısmı hiledir. Bugün bunun üzerinde çok çalıştım ve WSIT eğitimini takip ederek NetBeans'i güvenli bir WS İstemcisi oluşturmaya başardım. Yine de Maven projemi konfigürasyonla mutlu oynamama imkan veremedim, ama ben yakınım. Bu benim ilk güvenli Web Servisim, bu yüzden ilerlerken öğreniyorum. Muhtemelen yaptıklarım hakkında bir mini öğretici olarak kendi yanıtımı sunacağım, böylece başkaları yaşadığım ağrının bir kısmını önleyebilir. Teşekkürler! – rtperson

+0

@rtperson WSIT'nin önemsiz olduğunu söylemiyorum ama hala wsimport sırasında olmasını beklediğiniz şeyi alamıyorum. İstemci tarafı WSIT yapılandırma dosyalarını sağlayan AFAIK, istemci yapay eserlerinin oluşturulmasını etkilemez. –

+0

Pascal, şimdi parçaların birbirine nasıl uyduğunu gördüğümde, wsimport'un şu an olduğundan daha farklı bir şey yapmayacağını biliyorum, bu yüzden bunu geçmeyi başardım. Ancak henüz Maven üzerinden güvenli bir WSIT istemcisi oluşturamadım. Şu anda evdeyim ve önümde kod yok, ancak istemci konfigürasyon dosyaları META-INF'de yaşayan iki tanesi, doğru mu? Wsit_client yapılandırması ve web hizmeti tanımlayıcısı? (Bu ilk kez WSIT'i uyguluyor, eğer söyleyemiyorsanız. Bilgimdeki büyük boşlukları affedin.) – rtperson

İlgili konular