You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cxf.apache.org by tl...@apache.org on 2006/10/20 09:37:18 UTC
svn commit: r466021 - in /incubator/cxf/trunk:
rt/bindings/xml/src/main/java/org/apache/cxf/binding/xml/interceptor/
rt/core/src/main/java/org/apache/cxf/interceptor/
rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/support/
systests/src/test/java/...
Author: tli
Date: Fri Oct 20 00:37:14 2006
New Revision: 466021
URL: http://svn.apache.org/viewvc?view=rev&rev=466021
Log:
support fault processing of rpc binding style
Modified:
incubator/cxf/trunk/rt/bindings/xml/src/main/java/org/apache/cxf/binding/xml/interceptor/Messages.properties
incubator/cxf/trunk/rt/bindings/xml/src/main/java/org/apache/cxf/binding/xml/interceptor/XMLFaultInInterceptor.java
incubator/cxf/trunk/rt/bindings/xml/src/main/java/org/apache/cxf/binding/xml/interceptor/XMLFaultOutInterceptor.java
incubator/cxf/trunk/rt/core/src/main/java/org/apache/cxf/interceptor/ClientFaultConverter.java
incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/support/JaxWsServiceFactoryBean.java
incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/jms/JMSClientServerTest.java
Modified: incubator/cxf/trunk/rt/bindings/xml/src/main/java/org/apache/cxf/binding/xml/interceptor/Messages.properties
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/bindings/xml/src/main/java/org/apache/cxf/binding/xml/interceptor/Messages.properties?view=diff&rev=466021&r1=466020&r2=466021
==============================================================================
--- incubator/cxf/trunk/rt/bindings/xml/src/main/java/org/apache/cxf/binding/xml/interceptor/Messages.properties (original)
+++ incubator/cxf/trunk/rt/bindings/xml/src/main/java/org/apache/cxf/binding/xml/interceptor/Messages.properties Fri Oct 20 00:37:14 2006
@@ -25,6 +25,7 @@
NO_OPERATION=No such operation: {0}
NO_DATAREADER=No DataReader is available for Service: {0}
NO_DATAWRITER=No DataWriter is available for Service: {0}
+UNKNOWN_EXCEPTION=Could not recogonize exception type: {0}
COULD_NOT_UNRWAP=Could not unrwap message parts.
REQ_NOT_UNDERSTOOD=Could not read request. Operation {0} is unknown.
ILLEAGAL_XMLFAULT_FORMAT=Illeagal xml fault message format.
Modified: incubator/cxf/trunk/rt/bindings/xml/src/main/java/org/apache/cxf/binding/xml/interceptor/XMLFaultInInterceptor.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/bindings/xml/src/main/java/org/apache/cxf/binding/xml/interceptor/XMLFaultInInterceptor.java?view=diff&rev=466021&r1=466020&r2=466021
==============================================================================
--- incubator/cxf/trunk/rt/bindings/xml/src/main/java/org/apache/cxf/binding/xml/interceptor/XMLFaultInInterceptor.java (original)
+++ incubator/cxf/trunk/rt/bindings/xml/src/main/java/org/apache/cxf/binding/xml/interceptor/XMLFaultInInterceptor.java Fri Oct 20 00:37:14 2006
@@ -59,7 +59,9 @@
}
String exMessage = reader.getElementText();
Fault fault = new XMLFault(exMessage);
- reader.next();
+ while (!StaxUtils.toNextElement(reader)) {
+ StaxUtils.nextEvent(reader);
+ }
if (StaxUtils.toNextElement(reader)) {
// handling detail
Element detail = StaxUtils.read(new FragmentStreamReader(reader)).getDocumentElement();
Modified: incubator/cxf/trunk/rt/bindings/xml/src/main/java/org/apache/cxf/binding/xml/interceptor/XMLFaultOutInterceptor.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/bindings/xml/src/main/java/org/apache/cxf/binding/xml/interceptor/XMLFaultOutInterceptor.java?view=diff&rev=466021&r1=466020&r2=466021
==============================================================================
--- incubator/cxf/trunk/rt/bindings/xml/src/main/java/org/apache/cxf/binding/xml/interceptor/XMLFaultOutInterceptor.java (original)
+++ incubator/cxf/trunk/rt/bindings/xml/src/main/java/org/apache/cxf/binding/xml/interceptor/XMLFaultOutInterceptor.java Fri Oct 20 00:37:14 2006
@@ -78,7 +78,9 @@
FaultInfo fi = it.next();
for (MessagePartInfo mpi : fi.getMessageParts()) {
Class cls = mpi.getProperty(Class.class.getName(), Class.class);
- if (cls != null && cls.equals(t.getClass())) {
+ Method method = t.getClass().getMethod("getFaultInfo", new Class[0]);
+ Class sub = method.getReturnType();
+ if (cls != null && cls.equals(sub)) {
if (mpi.isElement()) {
elName = mpi.getElementQName();
} else {
@@ -113,6 +115,8 @@
writer.flush();
+ } catch (NoSuchMethodException ne) {
+ throw new Fault(new org.apache.cxf.common.i18n.Message("UNKNOWN_EXCEPTION", BUNDLE), ne);
} catch (XMLStreamException xe) {
throw new Fault(new org.apache.cxf.common.i18n.Message("XML_WRITE_EXC", BUNDLE), xe);
}
Modified: incubator/cxf/trunk/rt/core/src/main/java/org/apache/cxf/interceptor/ClientFaultConverter.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/core/src/main/java/org/apache/cxf/interceptor/ClientFaultConverter.java?view=diff&rev=466021&r1=466020&r2=466021
==============================================================================
--- incubator/cxf/trunk/rt/core/src/main/java/org/apache/cxf/interceptor/ClientFaultConverter.java (original)
+++ incubator/cxf/trunk/rt/core/src/main/java/org/apache/cxf/interceptor/ClientFaultConverter.java Fri Oct 20 00:37:14 2006
@@ -42,14 +42,14 @@
* @author Dan Diephouse
*/
public class ClientFaultConverter extends AbstractPhaseInterceptor<Message> {
-
+
public ClientFaultConverter() {
super();
setPhase(Phase.UNMARSHAL);
}
public void handleMessage(Message msg) {
- Fault fault = (Fault)msg.getContent(Exception.class);
+ Fault fault = (Fault) msg.getContent(Exception.class);
if (fault.getDetail() != null) {
processFaultDetail(fault, msg);
@@ -57,52 +57,54 @@
}
protected void processFaultDetail(Fault fault, Message msg) {
- Element exDetail = (Element)DOMUtils.getChild(fault.getDetail(), Node.ELEMENT_NODE);
+ Element exDetail = (Element) DOMUtils.getChild(fault.getDetail(), Node.ELEMENT_NODE);
QName qname = new QName(exDetail.getNamespaceURI(), exDetail.getLocalName());
+ FaultInfo faultWanted = null;
+ Class cls = null;
+ BindingOperationInfo boi = msg.getExchange().get(BindingOperationInfo.class);
+ for (FaultInfo faultInfo : boi.getOperationInfo().getFaults()) {
+ for (MessagePartInfo mpi : faultInfo.getMessageParts()) {
+ String ns = null;
+ if (mpi.isElement()) {
+ ns = mpi.getElementQName().getNamespaceURI();
+ } else {
+ ns = mpi.getTypeQName().getNamespaceURI();
+ }
+ if (qname.getLocalPart().equals(mpi.getConcreteName().getLocalPart())
+ && qname.getNamespaceURI().equals(ns)) {
+ cls = (Class)mpi.getProperty(Class.class.getName());
+ faultWanted = faultInfo;
+ break;
+ }
+ }
+ if (faultWanted != null) {
+ break;
+ }
+ }
- FaultInfo faultInfo = getFaultInfo(msg.getExchange().get(BindingOperationInfo.class),
- qname,
- exDetail);
- if (faultInfo == null) {
+ if (faultWanted == null) {
return;
}
-
+
Service s = msg.getExchange().get(Service.class);
DataBinding dataBinding = s.getDataBinding();
-
+
DataReader<Node> reader = dataBinding.getDataReaderFactory().createReader(Node.class);
- Object e = reader.read(exDetail);
-
+ Object e = reader.read(qname, exDetail, cls);
+
if (!(e instanceof Exception)) {
- Class exClass = faultInfo.getProperty(Class.class.getName(), Class.class);
+ Class exClass = faultWanted.getProperty(Class.class.getName(), Class.class);
Class beanClass = e.getClass();
try {
- Constructor constructor = exClass.getConstructor(new Class[] {String.class,
- beanClass});
- e = constructor.newInstance(new Object[] {fault.getMessage(), e});
+ Constructor constructor = exClass.getConstructor(new Class[]{String.class, beanClass});
+ e = constructor.newInstance(new Object[]{fault.getMessage(), e});
} catch (Exception e1) {
throw new Fault(e1);
}
}
msg.setContent(Exception.class, e);
- }
-
- protected FaultInfo getFaultInfo(BindingOperationInfo operation,
- QName qname,
- Element exDetail) {
-
- for (FaultInfo faultInfo : operation.getOperationInfo().getFaults()) {
-
- for (MessagePartInfo mpi : faultInfo.getMessageParts()) {
- if (qname.equals(mpi.getConcreteName())) {
- return faultInfo;
- }
- }
- }
-
- return null;
}
}
Modified: incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/support/JaxWsServiceFactoryBean.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/support/JaxWsServiceFactoryBean.java?view=diff&rev=466021&r1=466020&r2=466021
==============================================================================
--- incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/support/JaxWsServiceFactoryBean.java (original)
+++ incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/support/JaxWsServiceFactoryBean.java Fri Oct 20 00:37:14 2006
@@ -178,9 +178,22 @@
for (FaultInfo fi : o.getFaults()) {
for (MessagePartInfo mpi : fi.getMessageParts()) {
- if (mpi.getConcreteName().equals(name)) {
- fi.setProperty(Class.class.getName(), exClass);
- mpi.setProperty(Class.class.getName(), beanClass);
+ String ns = null;
+ if (mpi.isElement()) {
+ ns = mpi.getElementQName().getNamespaceURI();
+ } else {
+ ns = mpi.getTypeQName().getNamespaceURI();
+ }
+ if (mpi.getConcreteName().getLocalPart().equals(name.getLocalPart())
+ && name.getNamespaceURI().equals(ns)) {
+ try {
+ Method method = beanClass.getMethod("getFaultInfo", new Class[0]);
+ Class sub = method.getReturnType();
+ fi.setProperty(Class.class.getName(), exClass);
+ mpi.setProperty(Class.class.getName(), sub);
+ } catch (NoSuchMethodException nsme) {
+ nsme.printStackTrace();
+ }
}
}
}
Modified: incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/jms/JMSClientServerTest.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/jms/JMSClientServerTest.java?view=diff&rev=466021&r1=466020&r2=466021
==============================================================================
--- incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/jms/JMSClientServerTest.java (original)
+++ incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/jms/JMSClientServerTest.java Fri Oct 20 00:37:14 2006
@@ -31,14 +31,14 @@
import junit.framework.Test;
import junit.framework.TestSuite;
-//import org.apache.cxf.hello_world_jms.BadRecordLitFault;
+import org.apache.cxf.hello_world_jms.BadRecordLitFault;
import org.apache.cxf.hello_world_jms.HelloWorldOneWayPort;
import org.apache.cxf.hello_world_jms.HelloWorldOneWayQueueService;
import org.apache.cxf.hello_world_jms.HelloWorldPortType;
import org.apache.cxf.hello_world_jms.HelloWorldPubSubPort;
import org.apache.cxf.hello_world_jms.HelloWorldPubSubService;
import org.apache.cxf.hello_world_jms.HelloWorldService;
-//import org.apache.cxf.hello_world_jms.NoSuchCodeLitFault;
+import org.apache.cxf.hello_world_jms.NoSuchCodeLitFault;
import org.apache.cxf.systest.common.ClientServerSetupBase;
import org.apache.cxf.systest.common.ClientServerTestBase;
import org.apache.cxf.transport.jms.JMSConstants;
@@ -134,7 +134,7 @@
assertNotNull("no response received from service", reply);
assertEquals(response2, reply);
- /*try {
+ try {
greeter.testRpcLitFault("BadRecordLitFault");
fail("Should have thrown BadRecoedLitFault");
} catch (BadRecordLitFault ex) {
@@ -147,7 +147,7 @@
} catch (NoSuchCodeLitFault nslf) {
assertNotNull(nslf.getFaultInfo());
assertNotNull(nslf.getFaultInfo().getCode());
- } */
+ }
}
} catch (UndeclaredThrowableException ex) {
throw (Exception)ex.getCause();