【问题标题】:Using CXF with eclipse在 Eclipse 中使用 CXF
【发布时间】:2012-01-19 07:27:27
【问题描述】:

我刚刚开始学习 CXF。我通过eclipse做了一个maven原型项目。当我运行 Maven 构建并部署在 JBoss 中时,它工作正常。

@WebService
public interface HelloWorld {
    String sayHi(String text);
}

@WebService(endpointInterface = "foo.HelloWorld" )

    public class HelloWorldImpl implements HelloWorld {

        public String sayHi(String text) {

            return new "Hello"+text;
        }
    }

然后我创建了一个 Employee 类,将 name 和薪水作为它的字段,并带有 getter 和 setter。我只是将HelloWorld sayHi的方法的返回类型更改为Employee,然后我从HelloWorldimpl sayHi方法返回了一个Employee对象。

然后它工作正常(我的意思是我使用 SOAP UI 检查了它,在修改代码后我得到了一个 Employee xml)

这个转换代码写在哪里。

另外我没有在代码中找到cxf.xml和cxf-servlet.xml:(这些xml在代码中保存在哪里)

<import resource="classpath:META-INF/cxf/cxf.xml" />
    <import resource="classpath:META-INF/cxf/cxf-servlet.xml" />

请帮助我理解这一点。

@ŁukaszBachman 我在 CXF*.jar 文件中获得了 XML 文件。

我应该怎么做才能在这个项目中进行扩展。我需要在 xml 文件中添加 bean 吗?

【问题讨论】:

  • 您不应该修改 CXF 库的任何部分,除非您是开发人员团队、贡献者或者您绝对知道自己在做什么;)但是,由于 Spring,您可以扩展一些 bean,它是国际奥委会。例如:如果您有由 CXF 创建并在 XImpl1 中实现的接口 X,那么您始终可以定义自己的实现 XImpl2 并将其与 CXF 连接,如果该库的创建者打算对其进行扩展。通常,不要扩展 API 中不应扩展的部分。设计良好的 API 应该为您提供足够的灵活性,让您可以随心所欲地使用它。

标签: java web-services cxf


【解决方案1】:

您显然是在使用带有 Spring 的 CXF 来导入在 CLASSPATH 上定义的资源。这意味着,Spring 将尝试导入在提供的两个文件(cxf.xml 和 cxf-servlet.xml)中定义的任何类型的 bean。

类加载器将在 servlet 容器启动时加载为您的 Web 应用程序(/WEB-INF/lib 目录)定义的所有库。然后它将启动 Spring 框架(在 /WEB-INF/web.xml 中定义)。当 spring 被加载时,它会尝试创建为你的 webapp 定义的所有 Bean,因此它会分析你自己的应用程序上下文以找出它还需要导入位于类路径上 META-INF/cxf/cxf.xml 的一些资源。所以它会再次在位于/WEB-INF/lib 的所有库中查找它。

这就是您在项目中看不到这两个文件的原因。它们由 CXF 库 (cxf.jar) 提供。您可能想自己检查一下,只需将 cxf.jar 作为常规 ZIP 文件打开并浏览到 /META-INF

最后说明,这两个文件是CXF框架提供的,你可能不需要修改它。如果它可以帮助您了解 CXF 内部结构,您可能只是看看它。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-21
    • 2014-08-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多