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 2008/09/04 17:46:35 UTC
svn commit: r692116 - in /cxf/trunk:
rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/interceptor/
rt/bindings/soap/src/test/java/org/apache/cxf/binding/soap/
systests/src/test/java/org/apache/cxf/systest/outofband/header/
Author: dkulp
Date: Thu Sep 4 08:46:34 2008
New Revision: 692116
URL: http://svn.apache.org/viewvc?rev=692116&view=rev
Log:
Don't hold onto the header objects (allow them to be gc'd sooner)
Update error message to be a bit more descriptive
Modified:
cxf/trunk/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/interceptor/Messages.properties
cxf/trunk/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/interceptor/MustUnderstandInterceptor.java
cxf/trunk/rt/bindings/soap/src/test/java/org/apache/cxf/binding/soap/MustUnderstandInterceptorTest.java
cxf/trunk/systests/src/test/java/org/apache/cxf/systest/outofband/header/OOBHeaderTest.java
Modified: cxf/trunk/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/interceptor/Messages.properties
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/interceptor/Messages.properties?rev=692116&r1=692115&r2=692116&view=diff
==============================================================================
--- cxf/trunk/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/interceptor/Messages.properties (original)
+++ cxf/trunk/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/interceptor/Messages.properties Thu Sep 4 08:46:34 2008
@@ -21,7 +21,7 @@
XML_STREAM_EXC=Error reading XMLStreamReader.
XML_WRITE_EXC=Error writing to XMLStreamWriter.
-MUST_UNDERSTAND=Can not understand QNames: {0}
+MUST_UNDERSTAND=MustUnderstand headers: {0} are not understood.
PARSER_EXC=Could not create DOM DocumentBuilder.
NO_OPERATION=No such operation: {0}
ATTACHMENT_IO=Attachment IO Exception: {0}
Modified: cxf/trunk/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/interceptor/MustUnderstandInterceptor.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/interceptor/MustUnderstandInterceptor.java?rev=692116&r1=692115&r2=692116&view=diff
==============================================================================
--- cxf/trunk/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/interceptor/MustUnderstandInterceptor.java (original)
+++ cxf/trunk/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/interceptor/MustUnderstandInterceptor.java Thu Sep 4 08:46:34 2008
@@ -59,7 +59,7 @@
SoapVersion soapVersion = soapMessage.getVersion();
Set<Header> mustUnderstandHeaders = new HashSet<Header>();
Set<URI> serviceRoles = new HashSet<URI>();
- Set<Header> notUnderstandHeaders = new HashSet<Header>();
+ Set<QName> notUnderstandHeaders = new HashSet<QName>();
Set<Header> ultimateReceiverHeaders = new HashSet<Header>();
Set<QName> mustUnderstandQNames = new HashSet<QName>();
@@ -67,27 +67,15 @@
serviceRoles, ultimateReceiverHeaders);
initServiceSideInfo(mustUnderstandQNames, soapMessage, serviceRoles);
- if (!checkUnderstand(mustUnderstandHeaders, mustUnderstandQNames,
- notUnderstandHeaders)) {
- StringBuffer sb = new StringBuffer(300);
- boolean first = true;
- for (Header head : notUnderstandHeaders) {
- if (first) {
- first = false;
- } else {
- sb.append(", ");
- }
- sb.append(head.getName().toString());
- }
- if (sb.length() > 0) {
- throw new SoapFault(new Message("MUST_UNDERSTAND", BUNDLE, sb.toString()),
- soapVersion.getMustUnderstand());
- }
+ checkUnderstand(mustUnderstandHeaders, mustUnderstandQNames,
+ notUnderstandHeaders);
+ if (!notUnderstandHeaders.isEmpty()) {
+ throw new SoapFault(new Message("MUST_UNDERSTAND", BUNDLE, notUnderstandHeaders),
+ soapVersion.getMustUnderstand());
}
if (!ultimateReceiverHeaders.isEmpty()) {
soapMessage.getInterceptorChain()
- .add(new UltimateReceiverMustUnderstandInterceptor(ultimateReceiverHeaders,
- mustUnderstandQNames));
+ .add(new UltimateReceiverMustUnderstandInterceptor(mustUnderstandQNames));
}
}
@@ -143,20 +131,16 @@
}
}
- private boolean checkUnderstand(Set<Header> mustUnderstandHeaders,
+ private void checkUnderstand(Set<Header> mustUnderstandHeaders,
Set<QName> mustUnderstandQNames,
- Set<Header> notUnderstandHeaders) {
+ Set<QName> notUnderstandHeaders) {
for (Header header : mustUnderstandHeaders) {
QName qname = header.getName();
if (!mustUnderstandQNames.contains(qname)) {
- notUnderstandHeaders.add(header);
+ notUnderstandHeaders.add(header.getName());
}
}
- if (notUnderstandHeaders.size() > 0) {
- return false;
- }
- return true;
}
@@ -165,42 +149,33 @@
*
*/
private class UltimateReceiverMustUnderstandInterceptor extends AbstractSoapInterceptor {
- Set<Header> ultimateReceiverHeaders;
Set<QName> knownHeaders;
- public UltimateReceiverMustUnderstandInterceptor(Set<Header> ult,
- Set<QName> knownHeaders) {
+ public UltimateReceiverMustUnderstandInterceptor(Set<QName> knownHeaders) {
super(Phase.INVOKE);
this.knownHeaders = knownHeaders;
- ultimateReceiverHeaders = ult;
}
public void handleMessage(SoapMessage soapMessage) throws Fault {
SoapVersion soapVersion = soapMessage.getVersion();
- Set<Header> notFound = new HashSet<Header>();
+ Set<QName> notFound = new HashSet<QName>();
List<Header> heads = soapMessage.getHeaders();
- for (Header header : ultimateReceiverHeaders) {
- if (heads.contains(header)
+
+ for (Header header : heads) {
+ if (header instanceof SoapHeader
+ && ((SoapHeader)header).isMustUnderstand()
&& header.getDirection() == Header.Direction.DIRECTION_IN
- && !knownHeaders.contains(header.getName())) {
- notFound.add(header);
+ && !knownHeaders.contains(header.getName())
+ && (StringUtils.isEmpty(((SoapHeader)header).getActor())
+ || soapVersion.getUltimateReceiverRole()
+ .equals(((SoapHeader)header).getActor()))) {
+
+ notFound.add(header.getName());
}
}
if (!notFound.isEmpty()) {
- StringBuffer sb = new StringBuffer(300);
- boolean first = true;
- for (Header head : notFound) {
- if (first) {
- first = false;
- } else {
- sb.append(", ");
- }
- sb.append(head.getName().toString());
- }
- if (sb.length() > 0) {
- throw new SoapFault(new Message("MUST_UNDERSTAND", BUNDLE, sb.toString()),
- soapVersion.getMustUnderstand());
- }
+ throw new SoapFault(new Message("MUST_UNDERSTAND", BUNDLE, notFound),
+ soapVersion.getMustUnderstand());
}
}
Modified: cxf/trunk/rt/bindings/soap/src/test/java/org/apache/cxf/binding/soap/MustUnderstandInterceptorTest.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/bindings/soap/src/test/java/org/apache/cxf/binding/soap/MustUnderstandInterceptorTest.java?rev=692116&r1=692115&r2=692116&view=diff
==============================================================================
--- cxf/trunk/rt/bindings/soap/src/test/java/org/apache/cxf/binding/soap/MustUnderstandInterceptorTest.java (original)
+++ cxf/trunk/rt/bindings/soap/src/test/java/org/apache/cxf/binding/soap/MustUnderstandInterceptorTest.java Thu Sep 4 08:46:34 2008
@@ -99,7 +99,7 @@
fail("InBound Exception Missing! Exception should be Can't understands QNames: " + PASSENGER);
} else {
assertEquals(soapMessage.getVersion().getMustUnderstand(), ie.getFaultCode());
- assertEquals("Can not understand QNames: " + PASSENGER, ie.getMessage().toString());
+ assertTrue(ie.getMessage().toString().contains(PASSENGER.toString()));
}
}
Modified: cxf/trunk/systests/src/test/java/org/apache/cxf/systest/outofband/header/OOBHeaderTest.java
URL: http://svn.apache.org/viewvc/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/outofband/header/OOBHeaderTest.java?rev=692116&r1=692115&r2=692116&view=diff
==============================================================================
--- cxf/trunk/systests/src/test/java/org/apache/cxf/systest/outofband/header/OOBHeaderTest.java (original)
+++ cxf/trunk/systests/src/test/java/org/apache/cxf/systest/outofband/header/OOBHeaderTest.java Thu Sep 4 08:46:34 2008
@@ -191,7 +191,7 @@
putLastTradedPrice.sayHi(holder);
fail("mustUnderstand header should not have been processed");
} catch (Exception ex) {
- assertTrue(ex.getMessage().contains("Can not understand"));
+ assertTrue(ex.getMessage(), ex.getMessage().contains("MustUnderstand"));
}
}
}