Hi,
I have a problem with putting faultTo message in queue. I use SOAP/JMS. This
is my bean.xml
<cxf:bus>
<cxf:inInterceptors>
<bean
class="org.apache.cxf.ws.addressing.soap.OneWayDecoupledFaultHandler"/>
</cxf:inInterceptors>
<cxf:outInterceptors>
<bean
class="org.apache.cxf.ws.addressing.soap.OneWayDecoupledFaultHandler"/>
</cxf:outInterceptors>
<cxf:features>
<wsa:addressing addressingRequired="true"
allowDuplicates="true"/>
<cxf:logging />
</cxf:features>
</cxf:bus>
<jms:conduit
name="{
http://ws.poc.exigenservices.com/}MyWebServicePort.jms-conduit">
<jms:address destinationStyle="queue"
jndiConnectionFactoryName="connectionFactory"
jndiDestinationName="wsRequest" jndiReplyDestinationName="wsReply">
</jms:address>
</jms:conduit>
<jms:destination
name="{
http://ws.poc.exigenservices.com/}MyWebServicePort.jms-destination">
<jms:address destinationStyle="queue"
jndiConnectionFactoryName="connectionFactory"
jndiDestinationName="wsRequest" jndiReplyDestinationName="wsReply">
</jms:address>
</jms:destination>
<jaxws:endpoint xmlns:tns="http://ws.poc.exigenservices.com/"
id="mywebservice"
implementor="com.exigenservices.poc.ws.MyWebServiceImpl"
wsdlLocation="wsdl/mywebservice.wsdl"
endpointName="tns:MyWebServicePort"
serviceName="tns:MyWebServiceService"
address="{
http://ws.poc.exigenservices.com/}MyWebServicePort.jms-destination">
<jaxws:features>
<wsa:addressing xmlns:wsa="http://cxf.apache.org/ws/addressing"
addressingRequired="true" allowDuplicates="true"/>
<bean class="org.apache.cxf.transport.jms.JMSConfigFeature"
p:jmsConfig-ref="jmsConfig" />
<bean class="org.apache.cxf.feature.LoggingFeature" />
</jaxws:features>
</jaxws:endpoint>
<bean id="jmsDestinationResolver"
class="org.springframework.jms.support.destination.JndiDestinationResolver"
/>
<bean id="jmsConfig"
class="org.apache.cxf.transport.jms.JMSConfiguration"
p:destinationResolver-ref="jmsDestinationResolver"
p:connectionFactory-ref="jmsConnectionFactory"
p:targetDestination="wsRequest" />
<bean id="jmsConnectionFactory"
class="org.springframework.jndi.JndiObjectFactoryBean">
<property name="jndiName">
<value>connectionFactory</value>
</property>
</bean>
<bean id="wsRequest"
class="org.springframework.jndi.JndiObjectFactoryBean">
<property name="jndiName">
<value>wsRequest</value>
</property>
</bean>
This is part from web service interface
@Oneway
@RequestWrapper(localName = "sayVoid", targetNamespace = "
http://ws.poc.exigenservices.com/", className =
"com.exigenservices.poc.ws.SayVoid")
@WebMethod(action = "urn:SayVoid")
public void sayVoid(
@WebParam(name = "arg0", targetNamespace = "")
java.lang.String arg0
);
And realisation:
public void sayVoid(java.lang.String arg0) {
LOG.info("Executing operation sayVoid");
System.out.println(arg0);
throw new IllegalStateException("IllegalStateException...");
}
This is my client side code:
JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean();
factory.setServiceClass(MyWebService.class);
factory.setServiceName(new QName("http://ws.poc.exigenservices.com/
",
"MyWebServiceService"));
factory.setEndpointName(new QName("http://ws.poc.exigenservices.com/
",
"MyWebServicePort"));
factory.setWsdlURL(MyWebService.class.getClassLoader()
.getResource("wsdl/mywebservice.wsdl").toString());
factory.getFeatures().add(new WSAddressingFeature());
factory.getFeatures().add(new LoggingFeature());
AddressingBuilder builder =
AddressingBuilder.getAddressingBuilder();
AddressingProperties maps = builder.newAddressingProperties();
AttributedURIType messageID = new ObjectFactory()
.createAttributedURIType();
messageID.setValue(UUID.randomUUID().toString());
maps.setMessageID(messageID);
EndpointReferenceType endpointReferenceType = new ObjectFactory()
.createEndpointReferenceType();
AttributedURIType faultTo = new ObjectFactory()
.createAttributedURIType();
faultTo.setValue("jms:jndi:wsFault?jndiConnectionFactoryName=connectionFactory");
endpointReferenceType.setAddress(faultTo);
maps.setFaultTo(endpointReferenceType);
MyWebService client = (MyWebService) factory.create();
((BindingProvider) client).getRequestContext().put(
JAXWSAConstants.CLIENT_ADDRESSING_PROPERTIES, maps);
client.sayVoid(msg);
System.out.println("MyEJB alert!!!");
I have this stack trace on server side:
Feb 2, 2011 5:50:41 PM
org.apache.cxf.service.factory.ReflectionServiceFactoryBean
buildServiceFromWSDL
INFO: Creating Service {
http://ws.poc.exigenservices.com/}MyWebServiceService from WSDL:
file:/C:/Users/MKamalov/workspace/poc-ws-client/bin/wsdl/mywebservice.wsdl
Feb 2, 2011 5:50:42 PM org.apache.cxf.interceptor.AbstractLoggingInterceptor
log
INFO: Outbound Message
---------------------------
ID: 16
Encoding: UTF-8
Content-Type: application/soap+xml; action="urn:SayVoid"
Headers:
Payload: <soap:Envelope
xmlns:soap="http://www.w3.org/2003/05/soap-envelope"><soap:Header><Action
xmlns="http://www.w3.org/2005/08/addressing">urn:SayVoid</Action><MessageID
xmlns="http://www.w3.org/2005/08/addressing">6918963f-053f-46bc-8354-cbc4cf9b1728</MessageID><ReplyTo
xmlns="http://www.w3.org/2005/08/addressing"><Address>
http://www.w3.org/2005/08/addressing/none</Address></ReplyTo><FaultTo
xmlns="http://www.w3.org/2005/08/addressing"><Address>jms:jndi:wsFault?jndiConnectionFactoryName=connectionFactory</Address></FaultTo></soap:Header><soap:Body><ns2:sayVoid
xmlns:ns2="http://ws.poc.exigenservices.com/
"><arg0>helloworld</arg0></ns2:sayVoid></soap:Body></soap:Envelope>
--------------------------------------
Feb 2, 2011 5:50:42 PM
org.springframework.jms.connection.SingleConnectionFactory initConnection
INFO: Established shared JMS Connection:
weblogic.jms.client.WLConnectionImpl@5ac45e
MyEJB alert!!!
Feb 2, 2011 5:50:42 PM org.apache.cxf.interceptor.AbstractLoggingInterceptor
log
INFO: Inbound Message
----------------------------
ID: 17
Encoding: UTF-8
Content-Type: application/soap+xml; action="urn:SayVoid"; charset=UTF-8
Headers: {SOAPJMS_bindingVersion=[1.0], JMSXDeliveryCount=[1],
JMSMessageType=[text], SOAPJMS_contentType=[application/soap+xml;
action="urn:SayVoid"; charset=UTF-8], SOAPJMS_isFault=[false],
SOAPJMS_requestURI=[jms:jndi:wsRequest]}
Payload: <soap:Envelope
xmlns:soap="http://www.w3.org/2003/05/soap-envelope"><soap:Header><Action
xmlns="http://www.w3.org/2005/08/addressing">urn:SayVoid</Action><MessageID
xmlns="http://www.w3.org/2005/08/addressing">6918963f-053f-46bc-8354-cbc4cf9b1728</MessageID><ReplyTo
xmlns="http://www.w3.org/2005/08/addressing"><Address>
http://www.w3.org/2005/08/addressing/none</Address></ReplyTo><FaultTo
xmlns="http://www.w3.org/2005/08/addressing"><Address>jms:jndi:wsFault?jndiConnectionFactoryName=connectionFactory</Address></FaultTo></soap:Header><soap:Body><ns2:sayVoid
xmlns:ns2="http://ws.poc.exigenservices.com/
"><arg0>helloworld</arg0></ns2:sayVoid></soap:Body></soap:Envelope>
--------------------------------------
Feb 2, 2011 5:50:42 PM org.apache.cxf.interceptor.AbstractLoggingInterceptor
log
INFO: Outbound Message
---------------------------
ID: 17
Encoding: UTF-8
Content-Type: application/soap+xml
Headers:
Payload: <soap:Envelope
xmlns:soap="http://www.w3.org/2003/05/soap-envelope"><soap:Header><MessageID
xmlns="http://www.w3.org/2005/08/addressing">urn:uuid:e7c46639-3af9-4fda-a24c-bbf0794fe2d7</MessageID><To
xmlns="http://www.w3.org/2005/08/addressing">
http://www.w3.org/2005/08/addressing/anonymous</To><ReplyTo xmlns="
http://www.w3.org/2005/08/addressing"><Address>
http://www.w3.org/2005/08/addressing/none</Address></ReplyTo><RelatesTo
xmlns="http://www.w3.org/2005/08/addressing">
http://www.w3.org/2005/08/addressing/unspecified
</RelatesTo></soap:Header><soap:Body></soap:Body></soap:Envelope>
--------------------------------------
Feb 2, 2011 5:50:42 PM com.exigenservices.poc.ws.MyWebServiceImpl sayVoid
INFO: Executing operation sayVoid
helloworld
Feb 2, 2011 5:50:42 PM org.apache.cxf.phase.PhaseInterceptorChain
doDefaultLogging
WARNING: Application {
http://ws.poc.exigenservices.com/}MyWebServiceService#{http://ws.poc.exigenservices.com/}sayVoidhas
thrown exception, unwinding now
org.apache.cxf.interceptor.Fault: IllegalStateException...
at
org.apache.cxf.service.invoker.AbstractInvoker.createFault(AbstractInvoker.java:155)
at
org.apache.cxf.jaxws.AbstractJAXWSMethodInvoker.createFault(AbstractJAXWSMethodInvoker.java:86)
at
org.apache.cxf.service.invoker.AbstractInvoker.invoke(AbstractInvoker.java:121)
at
org.apache.cxf.jaxws.JAXWSMethodInvoker.invoke(JAXWSMethodInvoker.java:60)
at
org.apache.cxf.service.invoker.AbstractInvoker.invoke(AbstractInvoker.java:75)
at
org.apache.cxf.interceptor.ServiceInvokerInterceptor$1.run(ServiceInvokerInterceptor.java:58)
at
java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:441)
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
at java.util.concurrent.FutureTask.run(FutureTask.java:138)
at
org.apache.cxf.workqueue.SynchronousExecutor.execute(SynchronousExecutor.java:37)
at
org.apache.cxf.interceptor.ServiceInvokerInterceptor.handleMessage(ServiceInvokerInterceptor.java:106)
at
org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:255)
at
org.apache.cxf.transport.ChainInitiationObserver.onMessage(ChainInitiationObserver.java:113)
at
org.apache.cxf.transport.jms.JMSDestination.onMessage(JMSDestination.java:217)
at
org.springframework.jms.listener.AbstractMessageListenerContainer.doInvokeListener(AbstractMessageListenerContainer.java:535)
at
org.springframework.jms.listener.AbstractMessageListenerContainer.invokeListener(AbstractMessageListenerContainer.java:495)
at
org.springframework.jms.listener.AbstractMessageListenerContainer.doExecuteListener(AbstractMessageListenerContainer.java:467)
at
org.springframework.jms.listener.AbstractPollingMessageListenerContainer.doReceiveAndExecute(AbstractPollingMessageListenerContainer.java:325)
at
org.springframework.jms.listener.AbstractPollingMessageListenerContainer.receiveAndExecute(AbstractPollingMessageListenerContainer.java:263)
at
org.springframework.jms.listener.DefaultMessageListenerContainer$AsyncMessageListenerInvoker.invokeListener(DefaultMessageListenerContainer.java:1058)
at
org.springframework.jms.listener.DefaultMessageListenerContainer$AsyncMessageListenerInvoker.executeOngoingLoop(DefaultMessageListenerContainer.java:1050)
at
org.springframework.jms.listener.DefaultMessageListenerContainer$AsyncMessageListenerInvoker.run(DefaultMessageListenerContainer.java:947)
at java.lang.Thread.run(Thread.java:662)
Caused by: java.lang.IllegalStateException: IllegalStateException...
at
com.exigenservices.poc.ws.MyWebServiceImpl.sayVoid(MyWebServiceImpl.java:50)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at
org.apache.cxf.service.invoker.AbstractInvoker.performInvocation(AbstractInvoker.java:173)
at
org.apache.cxf.service.invoker.AbstractInvoker.invoke(AbstractInvoker.java:89)
... 20 more
Feb 2, 2011 5:50:42 PM
org.apache.cxf.binding.soap.interceptor.Soap12FaultOutInterceptor$Soap12FaultOutInterceptorInternal
handleMessage
INFO: class
org.apache.cxf.binding.soap.interceptor.Soap12FaultOutInterceptor$Soap12FaultOutInterceptorInternalapplication/soap+xml;
action="urn:SayVoid"; charset=UTF-8
Feb 2, 2011 5:50:42 PM org.apache.cxf.interceptor.AbstractLoggingInterceptor
log
INFO: Outbound Message
---------------------------
ID: 17
Response-Code: 500
Encoding: UTF-8
Content-Type: application/soap+xml; action="urn:SayVoid"; charset=UTF-8
Headers: {SOAPJMS_bindingVersion=[1.0], JMSXDeliveryCount=[1],
JMSMessageType=[text], SOAPJMS_contentType=[application/soap+xml;
action="urn:SayVoid"; charset=UTF-8], SOAPJMS_isFault=[false],
SOAPJMS_requestURI=[jms:jndi:wsRequest]}
Payload: <soap:Envelope
xmlns:soap="http://www.w3.org/2003/05/soap-envelope"><soap:Header><Action
xmlns="http://www.w3.org/2005/08/addressing">
http://schemas.xmlsoap.org/wsdl/soap/envelope/fault</Action><MessageID
xmlns="http://www.w3.org/2005/08/addressing">urn:uuid:0f44bbe6-110c-46df-8934-2b731dac569b</MessageID><To
xmlns="http://www.w3.org/2005/08/addressing">jms:jndi:wsFault?jndiConnectionFactoryName=connectionFactory</To><RelatesTo
xmlns="http://www.w3.org/2005/08/addressing">6918963f-053f-46bc-8354-cbc4cf9b1728</RelatesTo></soap:Header><soap:Body><soap:Fault><soap:Code><soap:Value>soap:Receiver</soap:Value></soap:Code><soap:Reason><soap:Text
xml:lang="en">IllegalStateException...</soap:Text></soap:Reason></soap:Fault></soap:Body></soap:Envelope>
--------------------------------------
Feb 2, 2011 5:50:42 PM
org.springframework.jms.connection.SingleConnectionFactory initConnection
INFO: Established shared JMS Connection:
weblogic.jms.client.WLConnectionImpl@e75bc7
Feb 2, 2011 5:50:42 PM org.apache.cxf.interceptor.AbstractLoggingInterceptor
log
INFO: Inbound Message
----------------------------
ID: 18
Encoding: UTF-8
Content-Type: application/soap+xml; action="urn:SayVoid"; charset=UTF-8
Headers: {SOAPJMS_bindingVersion=[1.0], JMSXDeliveryCount=[1],
JMSMessageType=[text], SOAPJMS_contentType=[application/soap+xml;
action="urn:SayVoid"; charset=UTF-8], SOAPJMS_isFault=[true],
SOAPJMS_requestURI=[jms:jndi:wsRequest]}
Payload: <soap:Envelope
xmlns:soap="http://www.w3.org/2003/05/soap-envelope"><soap:Header><Action
xmlns="http://www.w3.org/2005/08/addressing">
http://schemas.xmlsoap.org/wsdl/soap/envelope/fault</Action><MessageID
xmlns="http://www.w3.org/2005/08/addressing">urn:uuid:0f44bbe6-110c-46df-8934-2b731dac569b</MessageID><To
xmlns="http://www.w3.org/2005/08/addressing">jms:jndi:wsFault?jndiConnectionFactoryName=connectionFactory</To><RelatesTo
xmlns="http://www.w3.org/2005/08/addressing">6918963f-053f-46bc-8354-cbc4cf9b1728</RelatesTo></soap:Header><soap:Body><soap:Fault><soap:Code><soap:Value>soap:Receiver</soap:Value></soap:Code><soap:Reason><soap:Text
xml:lang="en">IllegalStateException...</soap:Text></soap:Reason></soap:Fault></soap:Body></soap:Envelope>
--------------------------------------
Feb 2, 2011 5:50:42 PM org.apache.cxf.phase.PhaseInterceptorChain
doDefaultLogging
WARNING: Interceptor for {
http://ws.poc.exigenservices.com/}MyWebServiceService#{http://ws.poc.exigenservices.com/}sayVoidhas
thrown exception, unwinding now
org.apache.cxf.interceptor.Fault: Unexpected wrapper element {
http://www.w3.org/2003/05/soap-envelope}Fault found. Expected {
http://ws.poc.exigenservices.com/}sayVoid.
at
org.apache.cxf.interceptor.DocLiteralInInterceptor.handleMessage(DocLiteralInInterceptor.java:106)
at
org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:255)
at
org.apache.cxf.transport.ChainInitiationObserver.onMessage(ChainInitiationObserver.java:113)
at
org.apache.cxf.transport.jms.JMSDestination.onMessage(JMSDestination.java:217)
at
org.springframework.jms.listener.AbstractMessageListenerContainer.doInvokeListener(AbstractMessageListenerContainer.java:535)
at
org.springframework.jms.listener.AbstractMessageListenerContainer.invokeListener(AbstractMessageListenerContainer.java:495)
at
org.springframework.jms.listener.AbstractMessageListenerContainer.doExecuteListener(AbstractMessageListenerContainer.java:467)
at
org.springframework.jms.listener.AbstractPollingMessageListenerContainer.doReceiveAndExecute(AbstractPollingMessageListenerContainer.java:325)
at
org.springframework.jms.listener.AbstractPollingMessageListenerContainer.receiveAndExecute(AbstractPollingMessageListenerContainer.java:263)
at
org.springframework.jms.listener.DefaultMessageListenerContainer$AsyncMessageListenerInvoker.invokeListener(DefaultMessageListenerContainer.java:1058)
at
org.springframework.jms.listener.DefaultMessageListenerContainer$AsyncMessageListenerInvoker.executeOngoingLoop(DefaultMessageListenerContainer.java:1050)
at
org.springframework.jms.listener.DefaultMessageListenerContainer$AsyncMessageListenerInvoker.run(DefaultMessageListenerContainer.java:947)
at java.lang.Thread.run(Thread.java:662)
I use CXF 2.3.2. Please help me to undestand what is wrong???