将复杂组件接口转换为标准Web服务[Java]

时间:2013-04-01 08:42:38

标签: java web-services soap wsdl soa

我的组件具有复杂的接口,接受非原始数据或简单POJO的操作。

将此组件接口转换为可由Java和非Java客户端使用的标准Web Service接口的最佳实践(方法/方法)是什么,以便服务使用者可以使用WSDL生成没有问题的类。 / p>

可以用作它吗?如果没有,是否有办法尽可能少地改变它而不影响操作'行为?

组件界面具有以下操作:

/** This is asynchronous method that needs to callback the ResultHandler
    interface which has to be implemented by the component user to handle
    operationOne result **/
public void operationOne(int id, ResultHandler handler);

/** I think there is no problem with the following operation for Web Services,
    when using data contracts. Correct me if I’m wrong! **/
public String operationTwo(int id, MyObject obj);

ResultHandler接口:

/** Note that this handler interface contains InputStream
    and Exception as parameters for the handling methods **/ 
interface ResultHandler {
    void onComplete(InputStream is); 
    void onFailure(IOException ioEx); 
}

2 个答案:

答案 0 :(得分:0)

您可以在web方法中使用对象,因为它们被转换为复杂的WSDL类型,但请记住,这只能在一定程度上完成。您应该有简单的POJO来传输数据结构,这样您就可以获得WSDL /代码生成的好处,而不是您将用于执行业务职责的复杂类型。对于SOAP Web服务,REST / JSON应该是一个和平的建议。

<强>更新

有效测试您的网络服务的唯一方法是为您的网络服务上的每次通话创建一个moke。

Moq - How to mock web service call?

答案 1 :(得分:0)

您需要创建一个方法,该方法可以使用提供的参数调用组件并返回完整的响应。为获得最佳效果,该方法不应产生副作用。

然后向其添加@WebService和@WebMethod注释,并使用Endpoint.publish(...)创建一个发布该Web服务的小型独立应用程序。 Java 6中的JAX-WS堆栈可以从此自动生成WSDL。

有关完成此操作的完整教程,请参阅http://java.dzone.com/articles/jax-ws-hello-world