我正在使用 Apache CXF Web 服务和 Spring Integration,我现在不知道如何从您的 CXF 端点调用 Spring Integration 应用程序。
我有使用 Apache Camel 的经验,并且很容易解决这个问题......但在 Spring Integration 中我不知道......
我的行代码是:
在 webservices-definition-beans.xml 中:
<!-- Load CXF modules from cxf.jar --> <import resource="classpath:META-INF/cxf/cxf.xml"/> <import resource="classpath:META-INF/cxf/cxf-extension-soap.xml"/> <import resource="classpath:META-INF/cxf/cxf-servlet.xml"/> <!--Exposing the HelloWorld service as a SOAP service --> <bean id="jaxbBean" class="org.apache.cxf.jaxb.JAXBDataBinding" scope="prototype"/> <bean id="jaxws-and-aegis-service-factory" class="org.apache.cxf.jaxws.support.JaxWsServiceFactoryBean" scope="prototype"> <property name="dataBinding" ref="jaxbBean"/> <property name="serviceConfigurations"> <list> <bean class="org.apache.cxf.jaxws.support.JaxWsServiceConfiguration"/> <bean class="org.apache.cxf.aegis.databinding.AegisServiceConfiguration"/> <bean class="org.apache.cxf.service.factory.DefaultServiceConfiguration"/> </list> </property> </bean> <jaxws:endpoint id="helloWorld" serviceName="HelloWorldService" implementorClass="com.datys.cxf.HelloWorldService" address="/HelloWorld"> <jaxws:serviceFactory> <ref bean="jaxws-and-aegis-service-factory"/> </jaxws:serviceFactory> </jaxws:endpoint>
在 service-definition-beans.xml 中:
<gateway id="HelloWorldService" default-request-channel="requestStrings" default-reply-channel="replyStrings" service-interface="com.datys.cxf.HelloWorldService"> <method name="sayHello"/> </gateway> <channel id="requestStrings"/> <channel id="replyStrings"/> <!--<channel id="filesOut"/>--> <service-activator input-channel="requestStrings" output-channel="filesOut" ref="handler" method="handleString"/> <file:outbound-channel-adapter id="filesOut" directory="file:D:/OUTPUT"/> <beans:bean id="handler" class="org.springframework.integration.samples.filecopy.Handler"/>
但是,当我使用 client-webservices 部署和调用 Web 服务时,会返回此错误:
Exception in thread "main" javax.xml.ws.soap.SOAPFaultException: Could not instantiate service class com.datys.cxf.HelloWorldService because it is an interface.
at com.sun.xml.internal.ws.fault.SOAP11Fault.getProtocolException(SOAP11Fault.java:171)
at com.sun.xml.internal.ws.fault.SOAPFaultBuilder.createException(SOAPFaultBuilder.java:94)
at com.sun.xml.internal.ws.client.sei.SyncMethodHandler.invoke(SyncMethodHandler.java:240)
at com.sun.xml.internal.ws.client.sei.SyncMethodHandler.invoke(SyncMethodHandler.java:210)
at com.sun.xml.internal.ws.client.sei.SEIStub.invoke(SEIStub.java:103)
at $Proxy29.sayHello(Unknown Source)