简体   繁体   English

如何更改 JAX-WS webservice 的地址位置

[英]How to change address location of JAX-WS webservice

We have currently exposed JAX-RPC webservice with following URL我们目前已经公开了具有以下 URL 的 JAX-RPC 网络服务

http://xx.xx.xx.xx/myservice/MYGatewaySoapHttpPort?wsdl http://xx.xx.xx.xx/myservice/MYGatewaySoapHttpPort?wsdl

We migrated webservice to JAX-WS by generating WebService from above WSDL我们通过从 WSDL 之上生成 WebService 将 webservice 迁移到 JAX-WS

But new webservice is accessible from following URL但是可以从以下 URL 访问新的网络服务

http://xx.xx.xx.xx/myservice/MYGateway?wsdl http://xx.xx.xx.xx/myservice/MYGateway?wsdl

How i can make my JAX-WS webservice to be accessible by same URL mentioned first?我如何使我的 JAX-WS web 服务可以通过首先提到的相同 URL 访问? so that our customer dont have any problem.这样我们的客户就没有任何问题。

Update:更新:

Service Element of WSDL from which i created is as per expectation我创建的 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>

But WSDL of JAX-WS is not same and this WSDL is auto generated.但是 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

I created webservice with Oracle Eclipse Indigo.我使用 Oracle Eclipse Indigo 创建了 Web 服务。

Can i change with any annotaion?我可以更改任何注释吗?

Regards,问候,

This allows setting the endpoint in the client:这允许在客户端中设置端点:

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");

(thanks to user FoGH for pointing out that the endpoint should indicate the service, not the WSDL) (感谢用户FoGH指出端点应该指示服务,而不是 WSDL)

EDIT: here is some more information about setting up the org.codehaus.mojo.jaxws-maven-plugin:编辑:这里有一些关于设置 org.codehaus.mojo.jaxws-maven-plugin 的更多信息:

In your pom.xml:在你的 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>

In./src/main/resources/META-INF/jax-ws-catalog.xml:在./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>

Put your WSDL in./src/main/resources/META-INF/wsdl/MyGateway.wsdl将您的 WSDL 放入./src/main/resources/META-INF/wsdl/MyGateway.wsdl

So the wsdlLocation in the plugin configuration refers to an entry in the jax-ws-catalog.xml file.因此插件配置中的 wsdlLocation 引用了 jax-ws-catalog.xml 文件中的一个条目。 This file points to the actual WSDL file using a relative directory notation.该文件使用相对目录表示法指向实际的 WSDL 文件。

The value 'MyGatewaySystemId' ends up in the generated web service code as the location.值“MyGatewaySystemId”最终作为位置出现在生成的 Web 服务代码中。 So you could change this to the actual URL of the WSDL.所以您可以将其更改为 WSDL 的实际 URL。 Note that you would need configure your pom to set the correct URL for the build environment (dev, test, prod) for this to work consistently.请注意,您需要配置您的 pom 来为构建环境(开发、测试、生产)设置正确的 URL,以使其始终如一地工作。 A pointer in the right direction for this is to use maven profiles.正确方向的指针是使用 Maven 配置文件。

Tip: an easy way to download a copy of an online WSDL (and related XSD's) is to create a SoapUI project for it and then go to the 'WSDL content' tab.提示:下载在线 WSDL(和相关 XSD)副本的一种简单方法是为其创建一个 SoapUI 项目,然后转到“WSDL 内容”选项卡。

We missed very basic point, servlet mapping in web.xml did all trick.我们错过了非常基本的一点,web.xml 中的 servlet 映射完成了全部工作。 for details please find below link有关详细信息,请参阅以下链接

http://pic.dhe.ibm.com/infocenter/wasinfo/v6r1/index.jsp?topic=%2Fcom.ibm.websphere.wsfep.multiplatform.doc%2Finfo%2Fae%2Fae%2Ftwbs_customwebxml.html http://pic.dhe.ibm.com/infocenter/wasinfo/v6r1/index.jsp?topic=%2Fcom.ibm.websphere.wsfep.multiplatform.doc%2Finfo%2Fae%2Fae%2Ftwbs_customwebxml.html

Check your Service element of your JAX-WS WSDL file.检查 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 element specifies through which port to access the Web service. location 元素指定通过哪个端口访问 Web 服务。

read this这个

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM