我们目前使用以下网址公开了JAX-RPC网络服务
http://xx.xx.xx.xx/myservice/MYGatewaySoapHttpPort?wsdl
我们通过从WSDL上面生成WebService来将webservice迁移到JAX-WS
但可以通过以下网址访问新的网络服务
http://xx.xx.xx.xx/myservice/MYGateway?wsdl
如何使我的JAX-WS Web服务可以通过首先提到的相同URL访问?这样我们的客户就不会有任何问题。
更新
我创建的WSDL的服务元素是按期望
<WL5G3N0:service name="MyGateway">
<WL5G3N0:port binding="WL5G3N2:MyGatewaySoapHttp" name="MyGatewaySoapHttpPort">
<WL5G3N3:address location="http://xx.xx.xx/myservice/MyGatewaySoapHttpPort"/>
</WL5G3N0:port>
</WL5G3N0:service>
但是JAX-WS的WSDL不相同,并且这个WSDL是自动生成的。
<WL5G3N0:service name="MyGateway">
- <WL5G3N0:port binding="WL5G3N2:MyGatewaySoapHttp" name="MyGatewaySoapHttpPort">
<WL5G3N3:address location="http://xx.xx.xx/myservice/MyGateway" />
</WL5G3N0:port>
</WL5G3N0:service
我使用Oracle Eclipse Indigo创建了webservice。
我能用任何注释改变吗?
此致
答案 0 :(得分:11)
这允许在客户端中设置端点:
MYGateway service = new MYGateway();
MYGatewaySoapServiceHttpPort port = service=.getMYGatewaySoapServiceHttpPort();
BindingProvider bp = (BindingProvider) port;
bp.getRequestContext().put(
BindingProvider.ENDPOINT_ADDRESS_PROPERTY,
"http://xx.xx.xx.xx/myservice/MYGateway");
(感谢用户FoGH指出端点应该指示服务,而不是wsdl)
编辑:这里有一些关于设置org.codehaus.mojo.jaxws-maven-plugin的更多信息:
在你的pom.xml中:
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>jaxws-maven-plugin</artifactId>
<executions>
<execution>
<id>MyGateway</id>
<goals>
<goal>wsimport</goal>
</goals>
<configuration>
<wsdlDirectory>src/main/resources/META-INF/wsdl</wsdlDirectory>
<wsdlFiles>
<wsdlFile>MyGateway.wsdl</wsdlFile>
</wsdlFiles>
<wsdlLocation>MyGatewaySystemId</wsdlLocation>
<!-- Line below to avoid regeneration bug if you have multiple executions -->
<staleFile>${project.build.directory}/jaxws/stale/wsdl.MyGateway.done</staleFile>
</configuration>
</execution>
</executions>
</plugin>
在./src/main/resources/META-INF/jax-ws-catalog.xml中:
<catalog xmlns="urn:oasis:names:tc:entity:xmlns:xml:catalog">
<system systemId="MyGatewaySystemId" uri="wsdl/MyGateWay.wsdl"/>
</catalog>
将您的WSDL放入./src/main/resources/META-INF/wsdl/MyGateway.wsdl
因此,插件配置中的wsdlLocation指的是jax-ws-catalog.xml文件中的一个条目。此文件使用相对目录表示法指向实际的WSDL文件。
值'MyGatewaySystemId'最终在生成的Web服务代码中作为位置。因此,您可以将其更改为WSDL的实际URL。请注意,您需要配置pom以设置构建环境(dev,test,prod)的正确URL,以使其始终如一地工作。正确方向的指针是使用maven配置文件。
提示:下载在线WSDL(及相关XSD)副本的简便方法是为其创建SoapUI项目,然后转到“WSDL内容”选项卡。
答案 1 :(得分:3)
我们错过了非常基本的观点,web.xml中的servlet映射确实很有效。有关详细信息,请在下面链接
答案 2 :(得分:0)
检查JAX-WS WSDL文件的Service
元素。
<service name="Hello_Service">
<documentation>WSDL File for HelloService</documentation>
<port binding="tns:Hello_Binding" name="Hello_Port">
<soap:address
location="http://www.examples.com/SayHello/">
</port>
</service>
location元素指定通过哪个端口访问Web服务。
阅读this