dynamic proxy soap web service client in java?

走远了吗. 提交于 2020-01-21 03:28:25

问题


Is there any way to use soap-rpc web services such that the client is generated via a shared interface? Restful web services do it this way, but what about soap based? Do you always have to use a tool like Axis or CXF to generate your stubs and proxies, or is there something out there that will set it up dynamically?

Thanks.

EDIT #1:

To clarify, I'm looking to do something like this:

Common interface:

@WebService
public interface MyWebService {

   @WebMethod
   String helloWorld();
}

This common interface can already be used to create the server side component. My question is: can this type of common interface be used on the client side to generate dynamic proxies? Restful web services do it this way (Restlets & CXF) and it seems the .Net world has this type of functionality too.


回答1:


I would see this tutorial of JAX-WS useful for your purposes:

In the example code the Web Services Client is configured by adding an annotation @WebServiceRef with a property pointing to the WSDL location to the client implementation class and no tools are needed to access the stuff from the Web Service that is referenced.

Was this the way you would like to have it, or did this even answer to right question?




回答2:


Not exactly sure what you're looking for, but if you don't want to rely on JAX-WS/JAXB-generated artifacts (service interfaces and binding objects), you can make use of the Service and Dispatch APIs. For example:

QName serviceName = new QName(...);
Service service = Service.create(serviceName);
QName portName = new QName(...);
String endpointAddress = "...";
service.addPort(portName, SOAPBinding.SOAP11HTTP_BINDING, endpointAddress);
Dispatch<SOAPMessage> dispatch = service.createDispatch(portName, SOAPMessage.class, Service.Mode.MESSAGE);
SOAPMessage request = ...;
SOAPMessage response = dispatch.invoke(request);



回答3:


Check Apache CXF. Configuring a Spring Client (Option 1).




回答4:


When you want to call a webservice, you must have knowledge of methods implemented on it. For that, We need to make stubs OR we can read it from WSDL.

I have created a WS client, using AXIS2 libraries, which is without stubs. The thing is, for each diff. WS we need to create response handles.

You can call any WS method using SOAP envelops and handle the response.

//common interface for response handlers...
//implement this for diff. web service/methods

public interface WSRespHandler{
    public Object getMeResp(Object respData);
}

//pass particular handler to client when you call some WS
public class WebServiceClient {
    public Object getResp(WSRespHandler respHandler) {
        ...
        return repHandler.getMeResp(xmlData);
    }
}

Please check the link below, which shows the example interface for WS client.

http://javalibs.blogspot.com/2010/05/axis2-web-service-client-without.html

For every diff. WS method we can have diff. implementation for WSRespHandler interface, which will help parsing the response.




回答5:


Not knowing java so well, but being forced to learn some to accomplish a task that I was given, I needed to consume a .Net service that I have already written, I had to do a little research.

I found that 99% of the examples/samples/problems with invoking a method call against a .Net service, or any service for that matter involved using J2EE (ServiceManager) or build classes and a proxy that reflect the service being invoked. Unfortunately for me, none of this would work. I was working "in a box". I could not add new classes, could not WSDL references, did not have J2EE, but DID have access to the standard java libs. I am used to doing this sort of thing in pretty much every other language but java, but now there was no choice, and java it was.

A lot of digging and figuring out all new terminology, methods, classes, etc, I knew I was getting close, but was having issues with some small items to complete the task. Then I came across this post: http://www.ibm.com/developerworks/xml/library/x-jaxmsoap/

As long as you have some sort of idea of what you need to send the soap service in term of the soap envelope, the above link will give you the information you need to be able to invoke a service without the classes, wsdl class generators and J2EE, apache or other dependencies.

In an hour from the time I read the mentioned article, I had a class working and about 10 minutes later, converted the code to the "in the box" solution.

Hope this helps




回答6:


Apache Tuscany might help you, although it may be heavier than you want http://tuscany.apache.org/



来源:https://stackoverflow.com/questions/6447974/dynamic-proxy-soap-web-service-client-in-java

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!