Java 如何更改JAX-WS Web服务的地址位置

Java 如何更改JAX-WS Web服务的地址位置,java,web-services,jax-ws,jax-rpc,Java,Web Services,Jax Ws,Jax Rpc,我们目前已经公开了具有以下URL的JAX-RPC Web服务 我们通过从上面的WSDL生成webservice,将webservice迁移到JAX-WS 但新的Web服务可以从以下URL访问 我如何使我的JAX-WS Web服务能够被前面提到的相同URL访问?这样我们的客户就不会有任何问题 更新: 我从中创建的WSDL的服务元素符合预期 <WL5G3N0:service name="MyGateway"> <WL5G3N0:port binding="WL5G3N2

我们目前已经公开了具有以下URL的JAX-RPC Web服务

我们通过从上面的WSDL生成webservice,将webservice迁移到JAX-WS

但新的Web服务可以从以下URL访问

我如何使我的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

- 

检查JAX-WSWSDL文件的
服务
元素

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

HelloService的WSDL文件
location元素指定通过哪个端口访问Web服务


阅读

这允许在客户端中设置端点:

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");
(感谢用户指出端点应该指示服务,而不是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>

org.codehaus.mojo
jaxws-maven插件
我的网关
wsimport
src/main/resources/META-INF/wsdl
MyGateway.wsdl
MyGatewaySystemId
${project.build.directory}/jaxws/stale/wsdl.MyGateway.done
在./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内容”选项卡。

我们忽略了非常基本的一点,web.xml中的servlet映射解决了所有问题。有关详细信息,请查看以下链接


您提供的代码将帮助客户。但我想更改服务器上Web服务的地址。所以在客户端不会有任何更改。看起来您的工具正在生成一个修改过的WSDL。你应该查看文档,看看你是否可以影响它生成的位置值。是的,这就是我要寻找的如何影响位置值。链接不再起作用。你能描述一下你的解决方案吗?因为它是公认的答案。