Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JAXWS—;如何更改端点地址_Java_Jax Ws_Webservice Client - Fatal编程技术网

Java JAXWS—;如何更改端点地址

Java JAXWS—;如何更改端点地址,java,jax-ws,webservice-client,Java,Jax Ws,Webservice Client,如何动态更改JAXWS客户端正在使用的地址? 此客户端是由wsimport生成的。如果使用wsimport,我不确定如何执行此操作。我也有同样的问题,所以我使用Intellij IDEA(版本9)为我创建客户机代码。它提供了一个服务端点构造函数,该构造函数接受wsdl url 使用Apache CXF解决了这个问题 只需要两行代码!以下是片段: URL url_wsdl = new URL("http://myserver/myservice?wsdl"); Service service =

如何动态更改JAXWS客户端正在使用的地址?
此客户端是由wsimport生成的。

如果使用wsimport,我不确定如何执行此操作。我也有同样的问题,所以我使用Intellij IDEA(版本9)为我创建客户机代码。它提供了一个服务端点构造函数,该构造函数接受wsdl url

使用Apache CXF解决了这个问题

只需要两行代码!以下是片段:

URL url_wsdl = new URL("http://myserver/myservice?wsdl");
Service service = Service.create(url_wsdl, new QName("http://myaddress...", "ServiceName"));
return service.getPort(MyJAXWSPortClass.class);

您可以使用BindingProvider接口实现这一点


我是新的贝宝集成,我不知道关于自适应支付api。 但我们有权使用GetVerifiedStatus方法检查特定电子邮件id是否在PayPal中拥有帐户

请使用下面的沙盒wsdl URL验证电子邮件

网址:

回应如下

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
   <soapenv:Header/>
   <soapenv:Body>
      <ns2:GetVerifiedStatusResponse xmlns:ns2="http://svcs.paypal.com/types/aa">
         <responseEnvelope>
            <timestamp>2015-07-20T23:42:46.661-07:00</timestamp>
            <ack>Success</ack>
            <correlationId>5cea9a8575ab9</correlationId>
            <build>17345626</build>
         </responseEnvelope>
         <accountStatus>UNVERIFIED</accountStatus>
         <countryCode>IN</countryCode>
         <userInfo>
            <emailAddress>anandg.saga@gmail.com</emailAddress>
            <accountType>PERSONAL</accountType>
            <accountId>6KD7EVWM2E2AQW</accountId>
            <name>
               <salutation/>
               <firstName>anand</firstName>
               <middleName/>
               <lastName>anand</lastName>
               <suffix/>
            </name>
            <businessName/>
         </userInfo>
      </ns2:GetVerifiedStatusResponse>
   </soapenv:Body>
</soapenv:Envelope>
使用下面的方法添加端点

private static void addEndPoint(AdaptiveAccountsPortType port,
            String endpointURL) {
        BindingProvider bp = (BindingProvider)port;
        bp.getRequestContext().put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY, endpointURL);

        /*List hchain = bp.getBinding().getHandlerChain();
        if (hchain == null) {
          hchain = new ArrayList();
        }
        hchain.add(new HTTPUserAgentHandler());
        bp.getBinding().setHandlerChain(hchain);*/
    }

请看动态是否意味着在运行时?请看,我正在寻找使用wsimport的解决方案。无法使用Intellij IDEAthis,它确实/应该工作,但是像这样构造一个新的服务对象不是一个好的解决方案。它会导致从新端点重新解析WSDL,这是非常昂贵的@McDowell的参考帖子是实现其要求的最佳方式:@HelterScelter:同意,但在某些情况下,这个价格是可以忽略的,例如当应用程序在启动时只需要映射此端口一次时。只有当服务器“”处于联机状态时,它才起作用。如果您有多个应用程序,这意味着以直接定义的顺序部署它们,这可能是一个问题(在循环依赖的情况下甚至是不可能的),我将此转换为BindingProvider解决方案,只是因为当客户发布新的WSDL时,我们的代码会不时中断。我不想深入探讨jaxws实现的细节,但BindingProvider方式是首选的解决方案。这不是我的选择。无法直接从服务端点获取WSDL。是否可以为整个服务而不是每个方法单独设置端点地址?这会对服务进行更改,缓存端口对象并根据需要多次使用它。这正是我喜欢的,因为有时WSDL在服务器端不可用。谢谢,它工作得很好!CXF非常容易使用。。。我的意思是,谁不聪明到认为我们需要使用BindingProvider接口来修改端口端点?而且,关于这一点的文档是最新的!仍然得到本地conf XML文件覆盖引用的属性。这对我不起作用。它仍然默认为WSDL中的地址。我使用CXF转换为Java。
String endpointURL = "https://svcs.sandbox.paypal.com/AdaptiveAccounts/GetVerifiedStatus";
private static void addEndPoint(AdaptiveAccountsPortType port,
            String endpointURL) {
        BindingProvider bp = (BindingProvider)port;
        bp.getRequestContext().put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY, endpointURL);

        /*List hchain = bp.getBinding().getHandlerChain();
        if (hchain == null) {
          hchain = new ArrayList();
        }
        hchain.add(new HTTPUserAgentHandler());
        bp.getBinding().setHandlerChain(hchain);*/
    }