how to handle exception in CXF

131 views
Skip to first unread message

yulinxp

unread,
Dec 26, 2007, 3:15:34 PM12/26/07
to cxf-zh
I am trying to add in BusinessLogicException in the spring HelloWorld
example.
But I just can't get it work!! Below are the server/client stack-trace
and my files.
Please help me!

----------------------
*server side

Dec 26, 2007 1:48:25 PM org.apache.cxf.phase.PhaseInterceptorChain
doIntercept
INFO: Interceptor has thrown exception, unwinding now
org.apache.cxf.interceptor.Fault: here
BusinessLogicException_Exception...
at
org.apache.cxf.service.invoker.AbstractInvoker.createFault(AbstractIn
voker.java:107)
at
org.apache.cxf.jaxws.JAXWSMethodInvoker.createFault(JAXWSMethodInvoke
r.java:76)
at
org.apache.cxf.service.invoker.AbstractInvoker.invoke(AbstractInvoker
.java:95)
at
org.apache.cxf.jaxws.JAXWSMethodInvoker.invoke(JAXWSMethodInvoker.jav
a:100)
at
org.apache.cxf.service.invoker.AbstractInvoker.invoke(AbstractInvoker
.java:68)
at org.apache.cxf.interceptor.ServiceInvokerInterceptor
$1.run(ServiceInv
okerInterceptor.java:56)
at
org.apache.cxf.workqueue.SynchronousExecutor.execute(SynchronousExecu
tor.java:37)
at
org.apache.cxf.interceptor.ServiceInvokerInterceptor.handleMessage(Se
rviceInvokerInterceptor.java:92)
at
org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseIntercept
orChain.java:207)
at
org.apache.cxf.transport.ChainInitiationObserver.onMessage(ChainIniti
ationObserver.java:73)
at
org.apache.cxf.transport.servlet.ServletDestination.doMessage(Servlet
Destination.java:79)
at
org.apache.cxf.transport.servlet.ServletController.invokeDestination(
ServletController.java:256)
at
org.apache.cxf.transport.servlet.ServletController.invoke(ServletCont
roller.java:160)
at
org.apache.cxf.transport.servlet.AbstractCXFServlet.invoke(AbstractCX
FServlet.java:170)
at
org.apache.cxf.transport.servlet.AbstractCXFServlet.doPost(AbstractCX
FServlet.java:148)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:
710)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:
803)
at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(Appl
icationFilterChain.java:290)
at
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationF
ilterChain.java:206)
at
org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperV
alve.java:233)
at
org.apache.catalina.core.StandardContextValve.invoke(StandardContextV
alve.java:175)
at
org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.j
ava:128)
at
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.j
ava:102)
at
org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineVal
ve.java:109)
at
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.jav
a:263)
at
org.apache.coyote.http11.Http11Processor.process(Http11Processor.java
:844)
at org.apache.coyote.http11.Http11Protocol
$Http11ConnectionHandler.proce
ss(Http11Protocol.java:584)
at org.apache.tomcat.util.net.JIoEndpoint
$Worker.run(JIoEndpoint.java:44
7)
at java.lang.Thread.run(Thread.java:595)
Caused by: demo.spring.BusinessLogicException_Exception: here
BusinessLogicExcep
tion_Exception...
at demo.spring.HelloWorldImpl.sayHi(HelloWorldImpl.java:43)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.
java:39)
at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAcces
sorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:585)
at
org.apache.cxf.service.invoker.AbstractInvoker.performInvocation(Abst
ractInvoker.java:124)
at
org.apache.cxf.service.invoker.AbstractInvoker.invoke(AbstractInvoker
.java:82)
... 26 more
Dec 26, 2007 1:48:25 PM
org.apache.cxf.binding.soap.interceptor.Soap12FaultOutIn
terceptor handleMessage
INFO: class
org.apache.cxf.binding.soap.interceptor.Soap12FaultOutInterceptorapp
lication/soap+xml

*client side

INFO: Interceptor has thrown exception, unwinding now
org.apache.cxf.binding.soap.SoapFault: Could not parse message.
at
org.apache.cxf.binding.soap.interceptor.Soap11FaultInInterceptor.handleMessage(Soap11FaultInInterceptor.java:
65)
at
org.apache.cxf.binding.soap.interceptor.Soap11FaultInInterceptor.handleMessage(Soap11FaultInInterceptor.java:
35)
at
org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:
207)
at
org.apache.cxf.interceptor.AbstractFaultChainInitiatorObserver.onMessage(AbstractFaultChainInitiatorObserver.java:
90)
at
org.apache.cxf.binding.soap.interceptor.ReadHeadersInterceptor.handleMessage(ReadHeadersInterceptor.java:
179)
at
org.apache.cxf.binding.soap.interceptor.ReadHeadersInterceptor.handleMessage(ReadHeadersInterceptor.java:
56)
at
org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:
207)
at
org.apache.cxf.endpoint.ClientImpl.onMessage(ClientImpl.java:402)
at org.apache.cxf.transport.http.HTTPConduit
$WrappedOutputStream.handleResponse(HTTPConduit.java:1948)
at org.apache.cxf.transport.http.HTTPConduit
$WrappedOutputStream.close(HTTPConduit.java:1791)
at
org.apache.cxf.transport.AbstractConduit.close(AbstractConduit.java:
66)
at
org.apache.cxf.transport.http.HTTPConduit.close(HTTPConduit.java:575)
at org.apache.cxf.interceptor.MessageSenderInterceptor
$MessageSenderEndingInterceptor.handleMessage(MessageSenderInterceptor.java:
62)
at
org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:
207)
at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:
254)
at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:
205)
at
org.apache.cxf.frontend.ClientProxy.invokeSync(ClientProxy.java:73)
at
org.apache.cxf.jaxws.JaxWsClientProxy.invoke(JaxWsClientProxy.java:
135)
at $Proxy35.sayHi(Unknown Source)
at demo.spring.client.Client.main(Client.java:46)
Caused by: com.ctc.wstx.exc.WstxParsingException: Received non-all-
whitespace CHARACTERS or CDATA event in nextTag().
at [row,col {unknown-source}]: [1,127]
at
com.ctc.wstx.sr.StreamScanner.constructWfcException(StreamScanner.java:
605)
at
com.ctc.wstx.sr.StreamScanner.throwParseError(StreamScanner.java:461)
at
com.ctc.wstx.sr.BasicStreamReader.nextTag(BasicStreamReader.java:1107)
at
org.apache.cxf.binding.soap.interceptor.Soap11FaultInInterceptor.handleMessage(Soap11FaultInInterceptor.java:
52)
... 19 more
Exception in thread "main" javax.xml.ws.soap.SOAPFaultException: Could
not parse message.
at
org.apache.cxf.jaxws.JaxWsClientProxy.invoke(JaxWsClientProxy.java:
175)
at $Proxy35.sayHi(Unknown Source)
at demo.spring.client.Client.main(Client.java:46)
Caused by: org.apache.cxf.binding.soap.SoapFault: Could not parse
message.
at
org.apache.cxf.binding.soap.interceptor.Soap11FaultInInterceptor.handleMessage(Soap11FaultInInterceptor.java:
65)
at
org.apache.cxf.binding.soap.interceptor.Soap11FaultInInterceptor.handleMessage(Soap11FaultInInterceptor.java:
35)
at
org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:
207)
at
org.apache.cxf.interceptor.AbstractFaultChainInitiatorObserver.onMessage(AbstractFaultChainInitiatorObserver.java:
90)
at
org.apache.cxf.binding.soap.interceptor.ReadHeadersInterceptor.handleMessage(ReadHeadersInterceptor.java:
179)
at
org.apache.cxf.binding.soap.interceptor.ReadHeadersInterceptor.handleMessage(ReadHeadersInterceptor.java:
56)
at
org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:
207)
at
org.apache.cxf.endpoint.ClientImpl.onMessage(ClientImpl.java:402)
at org.apache.cxf.transport.http.HTTPConduit
$WrappedOutputStream.handleResponse(HTTPConduit.java:1948)
at org.apache.cxf.transport.http.HTTPConduit
$WrappedOutputStream.close(HTTPConduit.java:1791)
at
org.apache.cxf.transport.AbstractConduit.close(AbstractConduit.java:
66)
at
org.apache.cxf.transport.http.HTTPConduit.close(HTTPConduit.java:575)
at org.apache.cxf.interceptor.MessageSenderInterceptor
$MessageSenderEndingInterceptor.handleMessage(MessageSenderInterceptor.java:
62)
at
org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:
207)
at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:
254)
at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:
205)
at
org.apache.cxf.frontend.ClientProxy.invokeSync(ClientProxy.java:73)
at
org.apache.cxf.jaxws.JaxWsClientProxy.invoke(JaxWsClientProxy.java:
135)
... 2 more
Caused by: com.ctc.wstx.exc.WstxParsingException: Received non-all-
whitespace CHARACTERS or CDATA event in nextTag().
at [row,col {unknown-source}]: [1,127]
at
com.ctc.wstx.sr.StreamScanner.constructWfcException(StreamScanner.java:
605)
at
com.ctc.wstx.sr.StreamScanner.throwParseError(StreamScanner.java:461)
at
com.ctc.wstx.sr.BasicStreamReader.nextTag(BasicStreamReader.java:1107)
at
org.apache.cxf.binding.soap.interceptor.Soap11FaultInInterceptor.handleMessage(Soap11FaultInInterceptor.java:
52)
... 19 more
----------------------
@WebService(targetNamespace = "http://spring.demo/", name =
"HelloWorld")

public interface HelloWorld {

@ResponseWrapper(targetNamespace = "http://spring.demo/",
className = "demo.spring.SayHiResponse", localName = "sayHiResponse")
@RequestWrapper(targetNamespace = "http://spring.demo/", className
= "demo.spring.SayHi", localName = "sayHi")
@WebResult(targetNamespace = "http://spring.demo/", name =
"return")
@WebMethod
public java.lang.String sayHi(
@WebParam(targetNamespace = "http://spring.demo/", name =
"arg0")
java.lang.String arg0
) throws BusinessLogicException_Exception;
}

----------------------
@WebFault(name = "BusinessLogicException", targetNamespace = "http://
spring.demo/")

public class BusinessLogicException_Exception extends Exception {
public static final long serialVersionUID = 20071226134020L;

private demo.spring.BusinessLogicException businessLogicException;

public BusinessLogicException_Exception() {
super();
}

public BusinessLogicException_Exception(String message) {
super(message);
}

public BusinessLogicException_Exception(String message, Throwable
cause) {
super(message, cause);
}

public BusinessLogicException_Exception(String message,
demo.spring.BusinessLogicException businessLogicException) {
super(message);
this.businessLogicException = businessLogicException;
}

public BusinessLogicException_Exception(String message,
demo.spring.BusinessLogicException businessLogicException, Throwable
cause) {
super(message, cause);
this.businessLogicException = businessLogicException;
}

public demo.spring.BusinessLogicException getFaultInfo() {
return this.businessLogicException;
}
}

----------------------
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "BusinessLogicException")
public class BusinessLogicException {
}

----------------------

@javax.jws.WebService(name = "HelloWorld", serviceName =
"HelloWorldService",
portName = "HelloWorldPort",
targetNamespace = "http://spring.demo/",
wsdlLocation = "file:/C:/Work/Application/apache-
cxf-2.0.3-incubator/samples/JAX_WS_Fault/wsdl/HelloWorld.wsdl" ,
endpointInterface = "demo.spring.HelloWorld")

public class HelloWorldImpl implements HelloWorld {

private static final Logger LOG =
Logger.getLogger(HelloWorldImpl.class.getName());

/* (non-Javadoc)
* @see demo.spring.HelloWorld#sayHi(java.lang.String arg0 )*
*/
public java.lang.String sayHi(java.lang.String arg0) throws
BusinessLogicException_Exception {
LOG.info("Executing operation sayHi");
System.out.println(arg0);

if(!arg0.equalsIgnoreCase("Fault")){
return "Hello " + arg0;
}

//throw new BusinessLogicException_Exception("here
BusinessLogicException_Exception...");
//throw new BusinessLogicException_Exception("look here" , new
BusinessLogicException());
throw new BusinessLogicException_Exception("look here" , new
BusinessLogicException(), new Throwable("here throwable"));
}

}

----------------------

public final class Client {

private Client() {
}

public static void main(String args[]){
// START SNIPPET: client
ClassPathXmlApplicationContext context
= new ClassPathXmlApplicationContext(new String[] {"demo/
spring/client/client-beans.xml"});

HelloWorld client = (HelloWorld)context.getBean("client");

String response;
try {
response = client.sayHi("Fault");
System.out.println("Response: " + response);
} catch (BusinessLogicException_Exception e) {
// TODO Auto-generated catch block
System.out.println("client receive
exception");
e.printStackTrace();
}
// END SNIPPET: client
}

jim ma

unread,
Dec 26, 2007, 9:48:47 PM12/26/07
to cxf...@googlegroups.com
Seems it caused by there is no filed in the BusinessLogicException. Add a filed  and try again .
Did you use wsdl first approach ?
It's more like an issue in CXF when marshal and unmarshal the fault message .


com.ctc.wstx.sr.BasicStreamReader.nextTag (BasicStreamReader.java:1107)

       at
org.apache.cxf.binding.soap.interceptor.Soap11FaultInInterceptor.handleMessage(Soap11FaultInInterceptor.java:
52)
       ... 19 more
Exception in thread "main" javax.xml.ws.soap.SOAPFaultException: Could
not parse message.
       at
org.apache.cxf.jaxws.JaxWsClientProxy.invoke(JaxWsClientProxy.java:
175)
       at $Proxy35.sayHi(Unknown Source)
       at demo.spring.client.Client.main (Client.java:46)

Caused by: org.apache.cxf.binding.soap.SoapFault: Could not parse
message.
       at
org.apache.cxf.binding.soap.interceptor.Soap11FaultInInterceptor.handleMessage(Soap11FaultInInterceptor.java :
65)
       at
org.apache.cxf.binding.soap.interceptor.Soap11FaultInInterceptor.handleMessage(Soap11FaultInInterceptor.java:
35)
       at
org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java :
207)
       at
org.apache.cxf.interceptor.AbstractFaultChainInitiatorObserver.onMessage(AbstractFaultChainInitiatorObserver.java:
90)
       at
org.apache.cxf.binding.soap.interceptor.ReadHeadersInterceptor.handleMessage (ReadHeadersInterceptor.java:

yulinxp

unread,
Dec 27, 2007, 11:19:47 AM12/27/07
to cxf-zh
What file do I need for BusinessLogicException?
I used Java code first.


On Dec 26, 8:48 pm, "jim ma" <mail2ji...@gmail.com> wrote:
> Seems it caused by there is no filed in the BusinessLogicException. Add a
> filed and try again .
> Did you use wsdl first approach ?
> It's more like an issue in CXF when marshal and unmarshal the fault message
> .
>
> > at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:
> > 254)
> > at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:
> > 205)
> > at
> > org.apache.cxf.frontend.ClientProxy.invokeSync(ClientProxy.java:73)
> > at
> > org.apache.cxf.jaxws.JaxWsClientProxy.invoke(JaxWsClientProxy.java:
> > 135)
> > at $Proxy35.sayHi(Unknown Source)
> > at demo.spring.client.Client.main(Client.java:46)
> > Caused by: com.ctc.wstx.exc.WstxParsingException: Received non-all-
> > whitespace CHARACTERS or CDATA event in nextTag().
> > at [row,col {unknown-source}]: [1,127]
> > at
> > com.ctc.wstx.sr.StreamScanner.constructWfcException(StreamScanner.java:
> > 605)
> > at
> > com.ctc.wstx.sr.StreamScanner.throwParseError(StreamScanner.java:461)
> > at
> > com.ctc.wstx.sr.BasicStreamReader.nextTag(BasicStreamReader.java:1107)
> > at
>
> > org.apache.cxf.binding.soap.interceptor.Soap11FaultInInterceptor.handleMessage
> > (Soap11FaultInInterceptor.java:
> > 52)
> > ... 19 more
> > Exception in thread "main" javax.xml.ws.soap.SOAPFaultException: Could
> > not parse message.
> > at
> > org.apache.cxf.jaxws.JaxWsClientProxy.invoke(JaxWsClientProxy.java:
> > 175)
> > at $Proxy35.sayHi(Unknown Source)
> > at demo.spring.client.Client.main(Client.java:46)
> > Caused by: org.apache.cxf.binding.soap.SoapFault: Could not parse
> > message.
> > at
>
> > org.apache.cxf.binding.soap.interceptor.Soap11FaultInInterceptor.handleMessage
> > (Soap11FaultInInterceptor.java:
> > 65)
> > at
>
> > org.apache.cxf.binding.soap.interceptor.Soap11FaultInInterceptor.handleMessage
> > (Soap11FaultInInterceptor.java:
> > at
> > org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(
> > PhaseInterceptorChain.java:
> > 207)
> > at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:
> > 254)
> > at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:
> > 205)
> > at
> > org.apache.cxf.frontend.ClientProxy.invokeSync(ClientProxy.java:73)
> > at
> > org.apache.cxf.jaxws.JaxWsClientProxy.invoke(JaxWsClientProxy.java:
> > 135)
> > ... 2 more
> > Caused by: com.ctc.wstx.exc.WstxParsingException: Received non-all-
> > whitespace CHARACTERS or CDATA event in nextTag().
> >
at [row,col {unknown-source}]: [1,127]
> > at
> > com.ctc.wstx.sr.StreamScanner.constructWfcException(StreamScanner.java:
> > 605)
> > at
> > com.ctc.wstx.sr.StreamScanner.throwParseError(StreamScanner.java:461)
> > at
>
> ...
>
> read more »

yulinxp

unread,
Dec 27, 2007, 6:28:13 PM12/27/07
to cxf-zh
I modify the exception to be similar to PingMeFault in wsdl-first
example.
I still got the same problem.

willem

unread,
Dec 27, 2007, 9:02:12 PM12/27/07
to cxf-zh
I think you need to remove the below code from your project,
since CXF client will use this class to unmarshall the message.

@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "BusinessLogicException")
public class BusinessLogicException {

}

姜宁 (Willem)
------------------
http://willem.bokeland.com/

jim ma

unread,
Dec 27, 2007, 9:04:40 PM12/27/07
to cxf...@googlegroups.com
Did you modify the BusinessLogicException to this :

@XmlAccessorType(XmlAccessType.FIELD)
@XmlRootElement(name = "businessLogicException")
public class BusinessLogicException {
protected int code;
protected String message;
}

Looks like this issue is caused by the empty FaultBean .

maomaode

unread,
Jan 1, 2008, 9:34:30 PM1/1/08
to cxf...@googlegroups.com
If you feel English is more comfortable than Chinese, I probably would
encourage you post it into the cxf email list directly,
This group is for Chinese for purpose.

Thanks for your understanding

yulinxp

unread,
Jan 2, 2008, 10:17:24 AM1/2/08
to cxf-zh
我原先Eclipse WSDL Generation Options 设置的是用Soap1.2, 这样server side会有下面的错误。

Dec 26, 2007 1:48:25 PM
org.apache.cxf.binding.soap.interceptor.Soap12FaultOutInterceptor
handleMessage
INFO: class
org.apache.cxf.binding.soap.interceptor.Soap12FaultOutInterceptorapplication/
soap+xml

我改用Soap1.1,就可以通过了。那问题是为什么Soap1.2产生的会出错呢?

yulinxp

unread,
Jan 8, 2008, 4:32:50 PM1/8/08
to cxf-zh
Reply all
Reply to author
Forward
0 new messages