0

我有一个非常基本的问题。如果我的 webapp 是 2.5 或更高版本,CXF 何时以及如何启动。我正在运行的 weblogic 10.3 选择了我的 web 应用程序中定义的 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">
4

2 回答 2

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 项目添加到依赖项。

于 2013-06-30T08:42:18.403 回答
0

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

于 2013-07-01T15:54:21.350 回答