You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cxf.apache.org by dk...@apache.org on 2010/01/26 22:56:40 UTC
svn commit: r903443 - in /cxf/trunk/rt/ws/addr/src:
main/java/org/apache/cxf/ws/addressing/ContextUtils.java
test/java/org/apache/cxf/ws/addressing/MAPAggregatorTest.java
Author: dkulp
Date: Tue Jan 26 21:56:39 2010
New Revision: 903443
URL: http://svn.apache.org/viewvc?rev=903443&view=rev
Log:
WS-A support throws NullPointerException in cases where we aren't mapped
directly to class objects (example: camel/smx routes and such)
Modified:
cxf/trunk/rt/ws/addr/src/main/java/org/apache/cxf/ws/addressing/ContextUtils.java
cxf/trunk/rt/ws/addr/src/test/java/org/apache/cxf/ws/addressing/MAPAggregatorTest.java
Modified: cxf/trunk/rt/ws/addr/src/main/java/org/apache/cxf/ws/addressing/ContextUtils.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/ws/addr/src/main/java/org/apache/cxf/ws/addressing/ContextUtils.java?rev=903443&r1=903442&r2=903443&view=diff
==============================================================================
--- cxf/trunk/rt/ws/addr/src/main/java/org/apache/cxf/ws/addressing/ContextUtils.java (original)
+++ cxf/trunk/rt/ws/addr/src/main/java/org/apache/cxf/ws/addressing/ContextUtils.java Tue Jan 26 21:56:39 2010
@@ -756,7 +756,10 @@
// http://www.w3.org/2005/02/addressing/wsdl schema
for (BindingFaultInfo bfi : bindingOpInfo.getFaults()) {
FaultInfo fi = bfi.getFaultInfo();
- if (t != null && t.getClass().isAssignableFrom(fi.getMessagePart(0).getTypeClass())) {
+ Class<?> fiTypeClass = fi.getMessagePart(0).getTypeClass();
+ if (t != null
+ && fiTypeClass != null
+ && t.getClass().isAssignableFrom(fiTypeClass)) {
if (fi.getExtensionAttributes() == null) {
continue;
}
Modified: cxf/trunk/rt/ws/addr/src/test/java/org/apache/cxf/ws/addressing/MAPAggregatorTest.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/ws/addr/src/test/java/org/apache/cxf/ws/addressing/MAPAggregatorTest.java?rev=903443&r1=903442&r2=903443&view=diff
==============================================================================
--- cxf/trunk/rt/ws/addr/src/test/java/org/apache/cxf/ws/addressing/MAPAggregatorTest.java (original)
+++ cxf/trunk/rt/ws/addr/src/test/java/org/apache/cxf/ws/addressing/MAPAggregatorTest.java Tue Jan 26 21:56:39 2010
@@ -22,8 +22,11 @@
import java.lang.reflect.Method;
import java.util.ArrayList;
+import java.util.Collection;
import java.util.Collections;
import java.util.List;
+import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
import javax.wsdl.extensions.ExtensibilityElement;
import javax.xml.namespace.QName;
@@ -38,16 +41,19 @@
import org.apache.cxf.binding.Binding;
import org.apache.cxf.binding.soap.SoapFault;
import org.apache.cxf.endpoint.Endpoint;
+import org.apache.cxf.interceptor.Fault;
import org.apache.cxf.message.Exchange;
import org.apache.cxf.message.Message;
import org.apache.cxf.message.MessageImpl;
import org.apache.cxf.phase.PhaseManager;
import org.apache.cxf.phase.PhaseManagerImpl;
import org.apache.cxf.service.Service;
+import org.apache.cxf.service.model.BindingFaultInfo;
import org.apache.cxf.service.model.BindingInfo;
import org.apache.cxf.service.model.BindingMessageInfo;
import org.apache.cxf.service.model.BindingOperationInfo;
import org.apache.cxf.service.model.EndpointInfo;
+import org.apache.cxf.service.model.FaultInfo;
import org.apache.cxf.service.model.InterfaceInfo;
import org.apache.cxf.service.model.MessageInfo.Type;
import org.apache.cxf.service.model.OperationInfo;
@@ -292,6 +298,7 @@
true,
false,
true});
+
aggregator.mediate(message, true);
control.verify();
verifyMessage(message, false, true, true);
@@ -405,7 +412,7 @@
Message message = getMessage();
Exchange exchange = getExchange();
- setUpOutbound(message, exchange, outbound);
+ setUpOutbound(message, exchange, outbound, fault);
setUpMessageProperty(message,
REQUESTOR_ROLE,
Boolean.valueOf(requestor));
@@ -574,7 +581,14 @@
setUpMessageProperty(message,
REQUESTOR_ROLE,
Boolean.FALSE);
- expectedAction = "http://foo/bar/SEI/opResponse";
+
+ if (fault) {
+ message.setContent(Exception.class, new SoapFault("blah",
+ (Throwable) new Exception(), Fault.FAULT_CODE_SERVER));
+ expectedAction = "http://foo/bar/SEI/Fault/Exception";
+ } else {
+ expectedAction = "http://foo/bar/SEI/opResponse";
+ }
}
setUpMessageProperty(message,
REQUESTOR_ROLE,
@@ -631,9 +645,9 @@
setUpExchangeOneway(exchange, oneway);
}
- private void setUpOutbound(Message message, Exchange exchange, boolean outbound) {
+ private void setUpOutbound(Message message, Exchange exchange, boolean outbound, boolean fault) {
setUpMessageExchange(message, exchange);
- setUpExchangeOutbound(exchange, message, outbound);
+ setUpExchangeOutbound(exchange, message, outbound, fault);
}
private void setUpConduit(Message message, Exchange exchange) {
@@ -657,6 +671,10 @@
opInfo.createMessage(new QName("http://foo/bar", "opRequest"), Type.INPUT));
opInfo.setOutput("opResponse",
opInfo.createMessage(new QName("http://foo/bar", "opResponse"), Type.INPUT));
+ FaultInfo finfo = opInfo.addFault(new QName("http://foo/bar", "opFault"),
+ new QName("http://foo/bar", "opFault"));
+ finfo.addMessagePart("fault");
+
BindingOperationInfo bindingOpInfo = new TestBindingOperationInfo(opInfo);
setUpExchangeGet(exchange, BindingOperationInfo.class, bindingOpInfo);
// Usual fun with EasyMock not always working as expected
@@ -718,8 +736,13 @@
private void setUpExchangeOutbound(Exchange exchange,
Message message,
- boolean outbound) {
- exchange.getOutMessage();
+ boolean outbound,
+ boolean fault) {
+ if (fault) {
+ exchange.getOutFaultMessage();
+ } else {
+ exchange.getOutMessage();
+ }
EasyMock.expectLastCall().andReturn(outbound ? message : null).anyTimes();
//exchange.setOutMessage(outbound ? message : new MessageImpl());
}
@@ -797,8 +820,18 @@
}
private static class TestBindingOperationInfo extends BindingOperationInfo {
+ private Map<QName, BindingFaultInfo> faults;
+
public TestBindingOperationInfo(OperationInfo oi) {
opInfo = oi;
+
+ Collection<FaultInfo> of = opInfo.getFaults();
+ if (of != null && !of.isEmpty()) {
+ faults = new ConcurrentHashMap<QName, BindingFaultInfo>(of.size());
+ for (FaultInfo fault : of) {
+ faults.put(fault.getFaultName(), new BindingFaultInfo(fault, this));
+ }
+ }
}
public BindingMessageInfo getInput() {
@@ -808,5 +841,10 @@
public BindingMessageInfo getOutput() {
return new TestBindingMessageInfo();
}
+
+ @Override
+ public Collection<BindingFaultInfo> getFaults() {
+ return Collections.unmodifiableCollection(this.faults.values());
+ }
}
}