Java 使用ApacheCXF生成类是如何工作的?

Java 使用ApacheCXF生成类是如何工作的?,java,cxf,Java,Cxf,因此,我使用ApacheCXF从WSDL创建了一个客户端存根应用程序。这一过程相对简单。我是在SoapUI界面中完成的。我提供了WSDL位置,告诉CXF生成客户机存根并点击OK 然后,我将项目导入Eclipse,添加ApacheCXF库,配置一些安全选项、证书等等 我写了一个main,对我的web服务进行了一些测试调用,然后成功了。 现在我的问题是,我不知道为什么它会起作用。更具体地说,当我在Eclipse中运行时,调试输出清楚地显示有CXF类被调用 信息:已加载配置文件cxf.xml。 和 o

因此,我使用ApacheCXF从WSDL创建了一个客户端存根应用程序。这一过程相对简单。我是在SoapUI界面中完成的。我提供了WSDL位置,告诉CXF生成客户机存根并点击OK

然后,我将项目导入Eclipse,添加ApacheCXF库,配置一些安全选项、证书等等
我写了一个main,对我的web服务进行了一些测试调用,然后成功了。

现在我的问题是,我不知道为什么它会起作用。更具体地说,当我在Eclipse中运行时,调试输出清楚地显示有CXF类被调用

信息:已加载配置文件cxf.xml。


org.apache.cxf.service.factory.ReflectionServiceFactoryBean buildServiceFromWSDL

在我的
main()
中,我正在调用

MyServices ss = new MyServices(wsdlURL, SERVICE_NAME);
port = ss.getWSHttpBindingMyService();
但是
MyServices
类扩展了
javax.xml.ws.Service
,并且没有任何提示CXF的内容

wsdl2java还生成了一个
MyService
接口和一个
MyServiceImpl
类,该类位于同一个包中。看起来是个不错的候选人。在我的
main()
中,我可以编写类似于
port.someMethod(someRequest)
的东西。如果我按ctrl键单击
someMethod
并遵循实现,它实际上会将我带到
MyServiceImpl
类,但那里只有伪代码

public Boolean someMethod(SomeRequest request) { 
            LOG.info("Executing operation");
            System.out.println(request);
            try {
                Boolean _return = null;
                return _return;
            } catch (java.lang.Exception ex) {
                ex.printStackTrace();
                throw new RuntimeException(ex);
            }
        }
因此,一定有一些配置告诉运行时要使用哪个实现。但我不知道它在哪里,也不知道是哪一个


感谢您使用cxf还是wsdl2java来生成客户端代码。 客户端代码将根据J2EE规范生成

生成的代码只是服务的声明,服务的实现将在服务器上进行

客户机代码利用webservice wsdl位置查找服务及其公开的操作

签入您的MyServices,您将看到您的服务URL。 前


谢谢

您好,我想问的是,它如何将生成的java代码与客户端的CXF实现连接起来。您是否在代码中创建了任何客户端实例。i、 e org.apache.cxf.endpoint.Client Client=org.apache.cxf.frontend.ClientProxy.getClient(端口);是的,我是
Client-Client=ClientProxy.getClient(服务)您正在创建的这个客户机实例来自与cxf相关的jar。您已经在项目中添加了cxf客户机jar依赖项。所以,一旦您尝试运行主程序,它就会尝试读取您的本地cxf.xml配置文件以检查配置。然后执行调用。
wsdlLocation = `"http://127.0.0.1/bookstore/services/search?wsdl"`