apache-cxf 使用_使用Apache CXF进行Web服务学习

apache-cxf 使用

在我的最后几个项目中,我使用了Web服务,在某些地方创建它们并在其他地方使用它们。 我认为标准任务(例如创建客户端,创建Web服务等)非常简单,如果遇到问题,有足够的资源。 但是对于Web服务而言,这是一项琐碎的任务,可能会花费大量时间,并且当您无法正确处理这些简单问题时,您会感到非常沮丧。

记录中

在其中一个项目中,我们使用Apache CXF创建了Web服务,并且一切正常。 只有一个问题Apache CXF使用java.util logger进行日志记录并用于打印各种日志。 我们的应用程序使用Log4J,因此使用Log4J进行Cxf和控制日志记录非常简单。

正如Apache CXF站点上提到的,配置记录器以使用Log4J是一项繁重的任务,这是页面上所说的:

将文件META-INF / cxf / org.apache.cxf.Logger添加到类路径,并确保它包含以下内容: org.apache.cxf.common.logging.Log4jLogger

很简单,您需要将文件添加到META-INF目录,即可完成。 我们有一个生成战争的Maven项目,因此我在为战争而生成的META-INF文件夹中创建了文件,即src / main / webapp / META-INF。

现在,该文件存在,但是日志记录仍然不受控制,CXF仍在使用Java logger。 我花了更多时间来弄清楚我做错了什么。 需要更多的努力才能意识到我已经错过了“在类路径中”的重要指导。 除WEB-INF之外生成的META-INF文件夹不在类路径中,战争的classes文件夹中需要META-INF文件夹。

回顾了这个问题之后,我错过了classpath部分是很愚蠢的,但是我也不明白为什么CXF的家伙为什么选择META-INF文件夹作为他们的配置文件。 META-INF在Java平台上可用于服务和类加载器。 当框架开始使用它进行配置时,它变得非常模棱两可,然后有多个文件夹可以玩,这会使事情变得很不清楚。

肥皂处理机

在另一个地方,我们有一个要求,我们需要拦截传入/传出的肥皂请求,然后对其进行处理。 Apache CXF提供了可用于完成此任务的拦截器 。 您可以有一些入站和出站,它们将按照要求进行操作。 但是我们使用的是Java附带的jaxws实现。 我们不打算将现有客户转移到CXF,因为我们有很多客户,所以我们花了很多时间才弄清楚如何使用jaxws完成此工作。

基本上,根据JAX-WS规范,您可以具有一些可以与客户端一起配置的SoapHandler 。 每当进行SOAP消息交换时,都将调用该处理程序。 在处理程序中,您可以确定这是入站消息还是出站消息,然后执行您的逻辑。 这些是配置处理程序所需的步骤:

创建一个扩展SoapHandler接口的类并实现handle消息方法:

class CustomHandler implements SOAPHandler<SOAPMessageContext>{
 // TODO: implement other methods
 public boolean handleMessage(SOAPMessageContext context) {
  // Check for message status
  Boolean outboundProperty = (Boolean)
   context.get(MessageContext.MESSAGE_OUTBOUND_PROPERTY);
  if (null == outboundProperty || !outboundProperty) {
      log.debug("not an outbound message");
      return true;
  }
 }
}

处理程序就像servlet过滤器。 他们是一个链条,被一个一个地称呼。 因此,我们需要创建一个XML文件,可以在其中配置所需的所有处理程序。

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<javaee:handler-chains
     xmlns:javaee="http://java.sun.com/xml/ns/javaee"
     xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <javaee:handler-chain>
    <javaee:handler>
      <javaee:handler-class>pkg.CustomHandler</javaee:handler-class>
    </javaee:handler>
  </javaee:handler-chain>
</javaee:handler-chains>

配置文件也必须位于类路径中,因为它将导入我们创建的Web服务客户端中。 完成此操作后,我们需要在Web服务客户端上启用此处理程序链。

@WebServiceClient(.....)
@HandlerChain(file="handlerFile.xml")
public class SampleServiceImpl extends Service{
}

处理程序概念来自jaxws规范,可在其所有实现(例如Metro,CXF等)上使用。

参考:“到目前为止的道路……”中 ,我们的JCG合作伙伴 Rahul Sharma所 提供的Web服务知识 博客

相关文章 :

翻译自: https://www.javacodegeeks.com/2011/11/web-service-learnings-with-apache-cxf.html

apache-cxf 使用

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值