在JAXWS中使用多个服务器

时间:2015-05-09 19:54:18

标签: java wsdl jax-ws uddi

我在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);

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

我认为这是我需要改变的......

1 个答案:

答案 0 :(得分:0)

您希望从/ business [] / service [] / bindingTemplate [] / accessPoint / endPoint获取实现相同接口的所有服务的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。逻辑应该很容易转移。