我正在使用WSGEN Ant任务从服务类生成WSDL。该任务运行良好,并生成所需的WSDL。我遇到的问题是试图让它将WSIT策略定义合并到WSDL的顶部。
当我在Netbeans中部署服务时(即不使用Ant处理WSGEN),Netbeans会生成一个包含WSIT策略定义的WSDL文件。WSIT策略包含在Netbeans - web-inf/wsit-com.mypackage.web.webservice.jaxws.MyServiceService.xml.生成的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 v2/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定义吗?我做错了什么?
干杯,
J
发布于 2010-09-23 17:31:25
似乎不可能使用wsgen ant目标自动合并WSIT和WSDL文件。它还表明,没有必要这样做- glassfish在运行时合并这两个文件,因此当您使用Glassfish提供的?wsdl url查看wsdl时,您会看到合并后的文件,它最终是客户端将使用的文件。值得庆幸的是,没有必要将策略定义合并到WSDL中,以便使用wsimport生成客户端,因为策略定义不会对生成的客户端代码产生任何影响。
但是,如果您像我一样,希望拥有WSDL和WSIT文件的本地副本,则可以使用Dennis Sosnoski开发的here合并工具(请参阅“metro策略工具”小节)来实现。此合并工具获取一个或多个策略文件,并将其与您的WSDL合并。
谢谢丹尼斯!
https://stackoverflow.com/questions/3736064
复制相似问题