CXF(和拦截器)和2.5个webapps

时间:2013-06-28 17:46:04

标签: servlets weblogic cxf interceptor

我有一个非常基本的问题。如果我的webapp为2.5或更高,CXF何时以及如何启动。我正在运行的weblogic 10.3获取了我的web-app中定义的WS注释。

到目前为止,我的网络应用版本为2.3。当我在webapp XML中将其升级到2.5时,我注意到我的拦截器没有被踢,因为现在weblogic能够处理注释并且CXF不在图片中(基于堆栈跟踪分析)。

我的观察是否正确,还是我完全错了?我刚刚改变:

<DOCTYPE web-app
PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd">
<web-app>

<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">

2 个答案:

答案 0 :(得分:0)

你是对的,将Servlet版本更改为2.5会触发使用@WebService注释注释的类的自动发现。

要防止这种情况,您必须调整类加载策略。在Apache CXF站点上有一个很好的描述:Apache CXF - WebLogic

根据本网站,您有两种选择:

  • “将geronimo-ws-metadata_2.0_spec-1.1.1.jar放在$ Weblogic_Home / jdk _ .. / jre / lib / endorsed文件夹中。” - 这将影响整个服务器,并可能破坏在WebLogic上运行的其他Web服务
  • “用耳朵打包,用weblogic-application.xml部署耳朵” - 这样就可以改变单个EAR应用程序的类加载策略,而不是整个服务器。

我更喜欢使用基于weblogic-application.xml的解决方案,因为它更具可移植性。

但是它不能立即对我起作用,我不得不向EAR / WAR添加额外的库 - geronimo-ws-metadata_2.0_spec-1.1.1.jar。

<dependency>
    <groupId>org.apache.geronimo.specs</groupId>
    <artifactId>geronimo-ws-metadata_2.0_spec</artifactId>
    <version>1.1.1</version>
</dependency>

如果您还没有EAR存档,则必须创建一个。假设你正在使用maven:

mvn archetype:generate -DarchetypeGroupId=org.codehaus.mojo.archetypes -DarchetypeArtifactId=ear-jee5

将WAR项目添加到依赖项中。

答案 1 :(得分:0)

我不想弄乱WL,因为我们在WL上运行了多个应用程序。所以简单的解决方案就是使用处理程序。见这里:handlers_introduction

相关问题