0

在 java ws 中使用多个服务器时出现问题。

所有这些服务器都提供相同的 WebService,但它们具有不同的名称和 IP。

我正在使用UDDI。

我的目标是让客户端在执行请求时联系所有正在执行该服务的服务器。

我应该通过处理程序执行此操作还是有其他方法?

    SDStore port =service.getSDStoreImplPort();

    String uddiURL = args[0];
    String name = args[1];
    Integer nrRep = Integer.parseInt(args[2]);

    System.out.printf("Contacting UDDI at %s%n", uddiURL);
    UDDINaming uddiNaming = new UDDINaming(uddiURL);

    System.out.printf("Looking for '%s'%n", name);
    Vector<String> repsAdd = new Vector<String>(); 
    for(;nrRep>=1;nrRep--){
        repsAdd.add(uddiNaming.lookup(name + nrRep));
        System.out.printf(name+nrRep);
    }
    uddiNaming.lookup(name);

            System.out.println("Creating stub ...");
    // ...

    System.out.println("Setting endpoint address ...");
    BindingProvider bindingProvider = (BindingProvider) port;
    Map<String, Object> requestContext = bindingProvider.getRequestContext();
    requestContext.put(ENDPOINT_ADDRESS_PROPERTY, repsAdd.elementAt(0));

    // Start Store
    StoreM g = new StoreM(port);

我知道通过port指令我得到了这个服务的接口,但是如何配置requestContext呢?

我想这是我需要改变的......

4

1 回答 1

0

您需要从 /business[]/service[]/bindingTemplate[]/accessPoint/endPoint 获取所有实现相同接口的服务的端点值。然后只需循环调用 JAXWS api 的集合,

((BindingProvider)port).getRequestContext().put(ENDPOINT_ADDRESS_PROPERTY, endPoint);

请记住,UDDI 也使用重定向,因此您希望处理这些情况。JUDDI 有一个辅助函数来支持这种解析(不确定您使用的是哪个 UDDI 库,但它看起来不像 JUDDI)。

https://svn.apache.org/repos/asf/juddi/trunk/juddi-rest-cxf/src/main/java/org/apache/juddi/api/impl/rest/UDDIInquiryJAXRS.java

搜索 GetEndpoints。逻辑应该易于转移。

于 2015-05-10T11:43:46.060 回答