Java 在eclipse中使用CXF

Java 在eclipse中使用CXF,java,web-services,cxf,Java,Web Services,Cxf,我刚刚开始学习CXF。我通过eclipse创建了一个maven原型项目。当我运行maven构建并部署在JBoss中时,它工作得很好 @WebService public interface HelloWorld { String sayHi(String text); } @WebService(endpointInterface = "foo.HelloWorld" ) public class HelloWorldImpl implements HelloWorld {

我刚刚开始学习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和salary,包含getter和setter。我刚刚将HelloWorld sayHi方法的返回类型更改为Employee,并从HelloWorldimpl sayHi方法返回了一个Employee对象

然后,它也可以正常工作(我的意思是,在修改代码之后,我使用soapui检查了它,得到了一个员工xml)

这个转换代码是在哪里编写的

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


请帮助我理解这一点

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


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

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

当servlet容器启动时,Classloader将加载为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的内部结构,您可以查看一下。

您不应该修改CXF库的任何部分,除非您是开发团队成员、贡献者或者您完全知道自己在做什么;)然而,由于Spring的出现,您可以扩展一些bean,这是IoC。例如:如果您有由CXF创建并在XImpl1中实现的接口X,那么您总是可以定义自己的实现XImpl2并将其与CXF连接起来,如果该库的创建者打算对其进行扩展。通常,不要扩展API中不打算扩展的部分。设计良好的API应该给您足够的灵活性,让您可以随心所欲地使用它。
<import resource="classpath:META-INF/cxf/cxf.xml" />
    <import resource="classpath:META-INF/cxf/cxf-servlet.xml" />