java中的动态代理soap web服务客户端?

时间:2011-06-23 00:05:05

标签: java web-services soap

有没有办法使用soap-rpc Web服务,以便通过共享接口生成客户端?宁静的网络服务这样做,但基于肥皂呢?您是否总是必须使用像Axis或CXF这样的工具来生成存根和代理,或者是否存在可以动态设置它的东西?

感谢。

编辑#1:

澄清一下,我想做这样的事情:

通用界面:

@WebService
public interface MyWebService {

   @WebMethod
   String helloWorld();
}

此通用接口已可用于创建服务器端组件。我的问题是:可以在客户端使用这种类型的通用接口来生成动态代理吗? Restful Web服务就是这样做的(Restlets& CXF),似乎.Net世界有这个功能类型也是如此。

6 个答案:

答案 0 :(得分:4)

我会看到this tutorial of JAX-WS对您的目的有用:

在示例代码中,通过向客户端实现类添加带有指向WSDL位置的属性的注释@WebServiceRef来配置Web服务客户端,并且不需要任何工具来访问来自Web Service的内容。引用。

这是你希望拥有它的方式,还是这样做甚至回答了正确的问题?

答案 1 :(得分:2)

不完全确定您要查找的内容,但如果您不想依赖JAX-WS / JAXB生成的工件(服务接口和绑定对象),则可以使用ServiceDispatch API。例如:

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

答案 2 :(得分:2)

答案 3 :(得分:1)

当您想要调用Web服务时,您必须了解在其上实现的方法。为此,我们需要创建存根,或者我们可以从WSDL中读取它。

我使用AXIS2库创建了一个WS客户端,它没有存根。事情是,对于每个差异。 WS我们需要创建响应句柄。

您可以使用SOAP信封调用任何WS方法并处理响应。

//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);
    }
}

请查看下面的链接,其中显示了WS客户端的示例界面。

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

对于每一个差异。 WS方法我们可以有diff。 WSRespHandler接口的实现,这将有助于解析响应。

答案 4 :(得分:1)

不太熟悉java,但是被迫学习一些来完成我给出的任务,我需要使用我已经写过的.Net服务,我不得不做一些研究。

我发现99%的示例/样本/问题调用.Net服务的方法调用,或任何服务涉及使用J2EE(ServiceManager)或构建类和反映被调用服务的代理。对我来说不幸的是,这一切都不会奏效。我在“一个盒子里”工作。我无法添加新类,无法WSDL引用,没有J2EE,但DID可以访问标准的java库。 我习惯用几乎所有其他语言来做这种事情,但是java,但现在没有选择,而java则是。

大量挖掘和弄清楚所有新的术语,方法,类等,我知道我已经接近了,但是在完成任务时遇到了一些小问题。 然后我发现了这篇文章:http://www.ibm.com/developerworks/xml/library/x-jaxmsoap/

只要您对根据soap信封发送soap服务所需的内容有所了解,上面的链接就会为您提供在没有类的情况下调用服务所需的信息,wsdl类生成器和J2EE,apache或其他依赖项。

在我阅读上述文章后的一个小时内,我有一个班级工作,大约10分钟后,将代码转换为“盒中”解决方案。

希望这有帮助

答案 5 :(得分:0)

Apache Tuscany可能对您有所帮助,尽管它可能比您想要的更重 http://tuscany.apache.org/