2010-09-17 56 views
0

我正在使用WSGEN Ant任務從服務類生成WSDL。任務運行良好並生成所需的WSDL。我遇到的問題是試圖讓它將WSIT策略定義合併到WSDL的頂部。Ant WSGEN WSDL生成 - 包括WSIT策略定義

當我在Netbeans中部署服務(即不使用Ant來處理WSGEN)時,Netbeans會生成一個WSDL文件,其中包含WSIT策略定義。 WSIT策略包含在由Netbeans生成的XML文件中 - web-inf/wsit-com.mypackage.web.webservice.jaxws.MyServiceService.xml。

<?xml version="1.0" encoding="UTF-8"?> MyService 
<definitions 
xmlns="http://schemas.xmlsoap.org/wsdl/" 
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" 
xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" name="Store" targetNamespace="http://jaxws.webservice.web.mypackage.com/" xmlns:tns="http://jaxws.webservice.web.mypackage.com/" xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" xmlns:wsp1="http://www.w3.org/ns/ws-policy" xmlns:fi="http://java.sun.com/xml/ns/wsit/2006/09/policy/fastinfoset/service" xmlns:tcp="http://java.sun.com/xml/ns/wsit/2006/09/policy/soaptcp/service" xmlns:wsaw="http://www.w3.org/2005/08/addressing" xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy" xmlns:sc="http://schemas.sun.com/2006/03/wss/server" xmlns:wspp="http://java.sun.com/xml/ns/wsit/policy" xmlns:wsam="http://www.w3.org/2007/05/addressing/metadata" xmlns:sp1="http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702" 
> 
    <portType name="MyService"> 
    </portType> 
    <binding name="MyServicePortBinding" type="tns:MyService"> 
     <wsp1:PolicyReference URI="#MyServicePortBindingPolicy"/> 
    </binding> 
    <service name="Store"> 
     <port name="MyServicePort" binding="tns:MyServicePortBinding"/> 
    </service> 
    <wsp1:Policy wsu:Id="MyServicePortBindingPolicy"> 
     <wsp1:ExactlyOne> 
      <wsp1:All> 
       <wsam:Addressing wsp1:Optional="false"/> 
       <sp1:TransportBinding> 
        <wsp1:Policy> 
         <sp1:TransportToken> 
          <wsp1:Policy> 
           <sp1:HttpsToken RequireClientCertificate="false"/> 
          </wsp1:Policy> 
         </sp1:TransportToken> 
         <sp1:Layout> 
          <wsp1:Policy> 
           <sp1:Lax/> 
          </wsp1:Policy> 
         </sp1:Layout> 
         <sp1:IncludeTimestamp/> 
         <sp1:AlgorithmSuite> 
          <wsp1:Policy> 
           <sp1:Basic128/> 
          </wsp1:Policy> 
         </sp1:AlgorithmSuite> 
        </wsp1:Policy> 
       </sp1:TransportBinding> 
       <sp1:SignedEncryptedSupportingTokens> 
        <wsp1:Policy> 
         <sp1:UsernameToken sp1:IncludeToken="http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702/IncludeToken/AlwaysToRecipient"> 
          <wsp1:Policy> 
           <sp1:WssUsernameToken10/> 
          </wsp1:Policy> 
         </sp1:UsernameToken> 
        </wsp1:Policy> 
       </sp1:SignedEncryptedSupportingTokens> 
       <sc:ValidatorConfiguration wspp:visibility="private"> 
        <sc:Validator name="usernameValidator" classname="com.mypackage.web.webservice.jaxws.validator.PlainTextPasswordValidator"/> 
       </sc:ValidatorConfiguration> 
       <sp1:Wss11/> 
      </wsp1:All> 
     </wsp1:ExactlyOne> 
    </wsp1:Policy> 
</definitions> 

我已經添加了此文件的位置到WSGEN任務的類路徑,以便它應該能夠檢測到它。但是,由WSGEN任務創建的WSDL不包括WS策略定義。

似乎沒有任何參數可以傳遞給Ant任務,告訴它包含WS-Policy。儘管如此,WSGEN任務使用與Netbeans使用的wsgen相同的wsgen,即來自glassfishv2/lib/webservices-tools.jar的wsgen。

<taskdef name="wsgen" 
    classname="com.sun.tools.ws.ant.WsGen" 
    classpathref="wstools.classpath" /> 

<wsgen sourcedestdir="${wsgen.src.dir}" 
    resourcedestdir="${wsproxy.resources.dir}" 
    destdir="${wsgen.build.dir}" 
    verbose="true" 
    xendorsed="true" 
    keep="true" 
    genwsdl="true" 
    sei="${store.client.service.name}"> 
    <classpath refid="ws.codegen.classpath" /> 
</wsgen> 

有沒有人有任何運氣讓Ant任務包含WS-Policy定義?我究竟做錯了什麼?

乾杯,

Ĵ

回答

0

這似乎是不可能的合併WSIT和WSDL文件自動使用WSGEN Ant目標。它也表明,這不是完全必要 - glassfish在運行時合併這兩個文件,所以當您使用Glassfish提供的?wsdl url查看您的wsdl時,您會看到最終是客戶端將使用的合併文件。謝天謝地,沒有必要將策略定義合併到WSDL中,以便使用wsimport生成客戶端,因爲策略定義對生成的客戶端代碼沒有任何影響。但是,如果像我一樣,您希望獲得組合的WSDL和WSIT文件的本地副本,則可以使用Dennis Sosnoski開發的合併工具here(請參閱「metro策略工具」的小節)來實現此目的。該合併工具接受一個或多個策略文件並將其與您的WSDL合併。

謝謝丹尼斯!