繁体   English   中英

Java中的Web服务

[英]Web Services in Java

在开发Java项目时,您通常使用什么来连接Web服务?

有不同的API可以完成这项工作。 从我读过的不同书籍和教程:JAX-WS,JAXB,JAXM,JAXR,JAX-RPC,Axis等等。

我对你究竟使用的是什么以及使用了多少感兴趣? 如果你愿意,可以把这作为一项调查:)

要回答您的问题,我们首先需要区分您列出的工具。

JAX-WS,JAXB,JAXM,JAXR,JAX-RPC是XML和Web服务相关的API,而Axis 1和2是这些API中的零个,一个或多个的实现,具体取决于版本。

JAX-B 1和2是XML到对象绑定API,JAX-WS是一个基于WSDL和SOAP的Web服务API,是JAX-RPC的前身,JAX-M是一个较旧的XML消息传递API,而JAX-R是一个抽象API用于与UDDI和ebXML等注册表进行交互。

从Java.net JAX-RPC页面:

JAX-RPC专家组在Sun Microsystems担任EG主管时拥有广泛的行业参与。 初始规范(JAX-RPC 1.0)是JSR-101,于2002年6月发布。2003年10月发布了维护版本,提供了与JAXB 1.0的更好集成以及对doc / literal的更好支持。

规范的下一个版本从JAX-RPC 2.0重命名为JAX-WS 2.0,并且正在开发为JSR-224; 此版本将解决该领域的许多其他要求,并将增加JAXB和JAX-WS规范之间的协同作用。 您可以在此处访问JAX-WS项目页面。

自从JAX-B 1.0和JAX-RPC 1.0以来,SOAP堆已经走了很长的路,我建议远离Axis 1.0和XFire(如果我没记错的话,甚至不实现JAX-RPC 1)。 有许多SOAP堆栈可以实现更新的API(JAX-WS 2.x和JAX-B 2.x)。

正如其他人所提到的,Axis 2,JAX-WS RI和CXF都是有效的选择。 这些SOAP堆栈更加成熟,支持许多现代WS- *规范。

关于使用IDE自动生成客户端代码的注释,请注意。 虽然我是分别从XSD和WSDL生成XML数据绑定代码和JAX-WS接口的主要支持者,但我提醒您在IDE中使用内置向导来执行自动生成。 如果您在一个拥有多个开发人员的团队中工作或计划修改生成的代码,您应该考虑这种方法的可维护性。

如果您有多个开发人员,那么其中一个人将使用不同版本的自动生成工具,不同的IDE,或者在他们的工具中使用不同的配置。 此外,如果您从向导自动生成,则由开发人员记住,如果您将来需要重新生成代码,他们将如何生成代码。 如果更改XSD并且不记得上次自动生成时的配置,则生成的代码可能与整个程序中已使用的现有代码不一致。

如果您计划修改生成的代码,请确保您只需要执行一次,从那时起您可以轻松地手动维护代码或定期将重新生成的代码与修改合并。

通过在构建过程中编写代码生成脚本可以避免这两个问题。 JAX-WS和JAX-B都带有Ant任务和/或Maven 2插件,这些插件易于在您的构建中使用。 严肃对待这些警告,因为我看到多个项目在需要修改5年前由离开公司的员工生成的代码时会遇到这些问题。

我最后提醒的是,在允许工具从WSDL中自动生成Web服务接口时要小心。 JAX-WS RI WSDL2Java工具喜欢将硬编码路径放置在生成的接口中的WSDL中。 我认为您应该自动生成一次接口,然后删除硬编码的URL和QName引用,使接口适用于实现接口所代表的WSDL绑定的所有Web服务,而不仅仅是您的一个端点。 WSDL描述。

你可以使用,apache轴。 如果您提供WSDL,这将自动生成Java存根。 一旦生成了存根,就像调用普通的java类一样。

这里的轴支持者需要精确。

在Axis 1.4于2006年4月发布之后, Axis 1.x项目在三年前被放弃了。 我们最近在Axis 1.4客户端库中遇到了几个非常关键的线程安全漏洞,包括100%的CPU旋转和死锁。 这些在Axis 1.x错误数据库中有详细记录(并且仍未解决)。 不用说,我们放弃了Axis 1.x(并且只使用原始的Apache HTTP客户端代码)。

Axis 2是一个全新的代码库......也许其他人可以评论它。

根据我们的经验,我们会考虑使用MetroCXF手工编码和(可能) Axis 2来实现SOAP Web服务。 (我们建议您选择基于REST的方法而不是SOAP,并使用我们喜欢的Restlet框架)

IMO,你绝对不会选择Axis 1.x

因为我们在Spring上投入了相当多的资金,所以我们将Spring-WS与JAXB一起使用。

我已经使用了Axis和Axis2,发现它们都非常好。

我认为最常见的用途是使用Apache Axis2。 用它创建服务非常容易,你会发现很多教程。

我已经使用了JAX-WS RIApache CXF 如果您使用的是Spring,那么CXF是一个非常好的选择。 正如Phill所提到的,还有Spring-WS ,但CXF建立在JAX-WS规范之上。 如果您不使用Spring,那么我会说RI是要走的路,特别是因为它与Java 6捆绑在一起。

对于POX + HTTP或RESTful Web服务, Restlet或一个不错的HTTP客户端实现是完全足够的。

Apache Axis为+1。

但JAX-WS也是一个不错的选择。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM