Java 在SpringBoot框架中将jaxws:client注册为Springbean
我看到了一个java项目,其中使用WSDL2Java命令生成了一个webservice客户机。该项目还包含一个spring.xml,其配置如下:Java 在SpringBoot框架中将jaxws:client注册为Springbean,java,spring,spring-mvc,spring-boot,cxf,Java,Spring,Spring Mvc,Spring Boot,Cxf,我看到了一个java项目,其中使用WSDL2Java命令生成了一个webservice客户机。该项目还包含一个spring.xml,其配置如下: <jaxws:client id = "com.xyz.connector" serviceClass = "com.xyz.XYZServicePort" address = "<endpoint url from config>" bus="XYZServiceBus"> </jaxws
<jaxws:client
id = "com.xyz.connector"
serviceClass = "com.xyz.XYZServicePort"
address = "<endpoint url from config>"
bus="XYZServiceBus">
</jaxws:client>
<bean id = "XYZPasswordCallback" class = "com.xyz.ClientPasswordCallback">
<property name = "password" value = "<password from config>"/>
</bean>
<bean id = "logInbound" class = "org.apache.cxf.interceptor.LoggingInInterceptor"/>
<bean id = "logOutbound" class = "org.apache.cxf.interceptor.LoggingOutInterceptor"/>
<cxf:bus bus="XYZServiceBus">
<cxf:inInterceptors>
<ref bean = "logInbound"/>
</cxf:inInterceptors>
<cxf:outInterceptors>
<ref bean = "logOutbound"/>
<bean class = "org.apache.cxf.ws.security.wss4j.WSS4JOutInterceptor">
<constructor-arg>
<map>
<entry key = "action" value = "UsernameToken"/>
<entry key = "addUTElements" value = "Unique ID Created"/>
<entry key = "user" value = "<user id from config>"/>
<entry key = "passwordType" value = "PasswordText"/>
<entry key = "passwordCallbackRef" value-ref = "XYZServiceBus"/>
</map>
</constructor-arg>
</bean>
</cxf:outInterceptors>
<cxf:outFaultInterceptors>
<ref bean = "logOutbound"/>
</cxf:outFaultInterceptors>
<cxf:inFaultInterceptors>
<ref bean = "logInbound"/>
</cxf:inFaultInterceptors>
</cxf:bus>
XYZServicePort是使用类中的注释自动连接的。然后使用XYZServicePort调用服务公开的操作
与spring.xml相关的xml代码段是添加到使用wsdl2java命令生成的webservice客户端项目中的唯一配置文件。我在spring.xml中没有看到任何配置,也没有在将xyzerviceport定义为bean的代码中看到任何注释。spring.xml中的xml片段是否以某种方式将XYZServicePort转换为Springbean?我不确定您遇到了什么问题-是关于@wsdl2java@client代码的问题不起作用了吗 回答你的问题:
Does the xml snippet present in spring.xml somehow converts the XYZServicePort to a spring bean?
CXF提供了关于如何与Spring集成的非常好的文档:
基本上,CXF在Spring初始化期间注册它自己的“工厂bean”——知道如何在Spring应用程序上下文中“生成”bean的类 因此,您可能正在寻找的是JaxWsClientFactoryBean --编辑:解释如何调用这些工厂bean--
1.您有一个CXF客户端项目,它在类路径上包含CXF JAR
2.在类加载期间,JVM加载其中的所有JAR和SPI
3.CXF注册为“javax.xml.ws.spi.provider”(在CXF-rt-frontend-jaxws-3.1.1.jar中有一个文件/META-INF/services/javax.xml.ws.spi.provider,指向org.apache.CXF.jaxws.spi.ProviderImpl)
4.当客户端代码实例化扩展javax.xml.ws.service的JAXWS服务时,javax.xml.ws.service的受保护构造函数会联系注册的SPI提供者(CXF提供者),魔术开始了:) 您应该在代码上设置断点,例如
TestService ss = new TestService(wsdlURL, SERVICE_NAME);
然后自己调试。
可以在客户端使用。您将为它提供一个bean名称、服务接口和服务URL,CXF将创建一个具有指定名称的bean,实现服务接口,调用远程SOAP服务,该服务需要在Spring中注入,而该客户端需要调用该服务
有关更多详细信息,请参考以下URL:
希望这会有帮助 如果我需要进一步探索或提供更多信息,请帮助让我知道。非常感谢您的回复!!列出的代码工作正常。客户端被导入,并按预期工作。但是,我无法理解xyzerviceport是如何转换为bean的,因为我没有看到任何显式配置。列出的代码/配置是代码中的全部内容,我看不到正在使用JaxWsClientFactoryBean。上面列出的配置是否将xyzerviceport转换为bean?我查看了您共享的文档,但仍然可以很好地了解我帖子中列出的代码/配置是如何导致XYZServicePort注册为Spring bean的。@PunterVicky我已经在我的回答中添加了关于CXF如何工作的解释。欢迎Vicky
TestService ss = new TestService(wsdlURL, SERVICE_NAME);