3

Axis2 和 Eclipse 是否可以生成 Web 服务客户端并让它使用包中已有的 java 类型,而不是创建它自己的类型。原因当然是如果我已经创建了类型 A 并且它创建了它自己的类型 AI 不能只将 A 类型的变量分配给 B 类型的变量。

wsdl 是从部署到应用程序服务器的 Web 服务生成的。如果无法从中生成它,则可以从已经存在的 java 文件中生成客户端。

4

6 回答 6

3

如果您真的想重用现有的类,您可以直接调用 Axis2 API,而无需使用 wsdl2java 生成客户端。下面是调用 Web 服务的一些相对简单的代码。您只需填写 Web 服务端点、方法 QName、预期返回类和服务参数。您可以重用现有的类作为返回值或参数。

如果您的 Web 服务非常复杂,那么您可能会发现您必须更深入地了解 API 才能使这种方法发挥作用。

serviceClient = new RPCServiceClient();
Options options = serviceClient.getOptions();

EndpointReference targetEPR = new EndpointReference("http://myservice");

options.setTo(targetEPR);

QName methodName = new QName("ns","methodName");

Class<?>[] returnTypes = new Class[] { String.class };

Object[] args = new Object[] { "parameter" };

Object[] response = serviceClient.invokeBlocking(methodName, args,
                returnTypes);
于 2008-10-15T20:05:12.293 回答
1

您正在从 wsdl 生成 Web 服务客户端,对吗?

wsdl2java 工具唯一知道的是 wsdl 中的信息,因此它不会知道您已经创建的任何类型。

如果您可以将类型信息输入到 wsdl 中,您可能会使其工作,尽管我从未尝试过。

如果您想要一种简单的方法从 Type A 复制到 Type B,那么您可以尝试BeanUtils.copyProperties,只要 Type A 和 Type B 的 setter 和 getter 匹配。

于 2008-10-15T16:13:53.787 回答
0

几乎大多数 java webservices 项目都会经历这个。我不知道 .NET/C# 世界是否有更优雅的解决方案。

正如 Mike 所提到的,使用 BeanUtils.copyProperties 是有道理的。

BR,
~A

于 2008-10-15T19:51:38.670 回答
0

如果你使用 eclipse 作为你的 ide,那就是你需要的:http: //www.eclipse.org/webtools/。它超越了你想要的其他事情。

于 2008-11-18T22:31:00.530 回答
0

您可以直接使用 ServiceClient 类调用 Web 服务,它只提供使用 XML 的调用并返回 XML 响应。对于不同的 Web 服务方法,您必须将 XML 响应转换为一些 java POJO 才能使用它。只有响应处理需要在您的最后完成。您可以从 XML 到 Map 等...

因此,您不需要任何其他存根类来调用任何 Web 服务,只需要处理响应 XML。您可以使用 Castor 或 JAXB 库将 XML 转换为 POJO。

这是您不需要每次都修改客户端以进行差异的方式。网页服务。您可以像在外部向客户端提供响应处理程序一样进行开发。因此,对于每个不同的 Web 服务,您都会有差异。响应处理程序类,它是您的接口的实现。

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

参考:

http://www.developer.com/java/web/article.php/3863416/Using-Axis2-and-Java-for-Asynchronous-Web-Service-Invocation-on-the-Client-Side.htm

http://www.devdaily.com/blog/post/java/java-web-service-client-read-array-list/

谢谢。

www.techlads.com

于 2010-05-20T09:56:22.747 回答
0

如果这篇文章对我阅读axis2生成客户端指南的人仍然有用:http: //axis.apache.org/axis2/java/core/docs/userguide-creatingclients.html

似乎 Axis2 Eclipse 插件配置为在集成模式下调用 ADB 代码生成(请参阅http://axis.apache.org/axis2/java/core/docs/adb/adb-howto.html),从而创建内部类在 Web 服务存根中。我不知道是否可以将生成模式更改为扩展模式(从存根类中生成数据类),但您可以使用 Wsdl2Java 进行命令行操作:

    %AXIS2_HOME%\bin\WSDL2Java -uri <wsdl file path> -p <package name> -u

-u 选项告诉 ADB 代码生成器将数据类创建为单独的类,而不是存根中的内部类。

于 2013-01-22T14:20:20.490 回答