0

WSGEN Antタスクを使用して、サービスクラスからWSDLを生成しています。タスクは正常に実行され、必要なWSDLを生成します。私が抱えている問題は、WSDLポリシー定義をWSDLの先頭に組み込むようにしようとしていることです。

Netbeansにサービスをデプロイすると(つまり、Antを使用してWSGENを処理しない場合)、NetbeansはWSITポリシー定義を含むWSDLファイルを生成します。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、つまりglassfishv2 / lib/webservices-tools.jarからのものを使用しています。

<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定義を含めることができた人はいますか?私は何が間違っているのですか?

乾杯、

J

4

1 に答える 1

0

wsgen ant ターゲットを使用して、WSIT ファイルと WSDL ファイルを自動的にマージすることはできないようです。これを行う必要がまったくないことも明らかになりました。glassfish は実行時に 2 つのファイルをマージするため、Glassfish が提供する ?wsdl URL を使用して wsdl を表示すると、最終的にクライアントが使用するマージされたファイルが表示されます。ありがたいことに、wsimport を使用してクライアントを生成するために、ポリシー定義を WSDL にマージする必要はありません。ポリシー定義は、生成されるクライアント コードに影響を与えないからです。

ただし、私のように、結合された WSDL と WSIT ファイルのローカル コピーが必要な場合は、Dennis Sosnoski がここで開発したマージ ツールを使用してこれを実現できます(「メトロ ポリシー ツール」のサブセクションを参照)。このマージ ツールは、1 つ以上のポリシー ファイルを取得し、それを WSDL とマージします。

ありがとうデニス!

于 2010-09-23T09:31:25.177 に答える