You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@servicemix.apache.org by tt...@apache.org on 2011/01/26 14:52:03 UTC
svn commit: r1063719 - in
/servicemix/components/trunk/bindings/servicemix-http/src/main/java/org/apache/servicemix/http:
HttpEndpoint.java processors/ProviderProcessor.java
Author: tterm
Date: Wed Jan 26 13:52:02 2011
New Revision: 1063719
URL: http://svn.apache.org/viewvc?rev=1063719&view=rev
Log:
SMXCOMP-845 http provider processor - simple response content type check missing which can lead to errors.
Modified:
servicemix/components/trunk/bindings/servicemix-http/src/main/java/org/apache/servicemix/http/HttpEndpoint.java
servicemix/components/trunk/bindings/servicemix-http/src/main/java/org/apache/servicemix/http/processors/ProviderProcessor.java
Modified: servicemix/components/trunk/bindings/servicemix-http/src/main/java/org/apache/servicemix/http/HttpEndpoint.java
URL: http://svn.apache.org/viewvc/servicemix/components/trunk/bindings/servicemix-http/src/main/java/org/apache/servicemix/http/HttpEndpoint.java?rev=1063719&r1=1063718&r2=1063719&view=diff
==============================================================================
--- servicemix/components/trunk/bindings/servicemix-http/src/main/java/org/apache/servicemix/http/HttpEndpoint.java (original)
+++ servicemix/components/trunk/bindings/servicemix-http/src/main/java/org/apache/servicemix/http/HttpEndpoint.java Wed Jan 26 13:52:02 2011
@@ -61,6 +61,7 @@ public class HttpEndpoint extends SoapEn
protected boolean synchronous;
protected boolean wantContentTypeHeaderFromExchangeIntoHttpRequest;
protected int timeout;
+ protected boolean responseContentTypeCheck;
public HttpEndpoint() {
}
@@ -92,6 +93,32 @@ public class HttpEndpoint extends SoapEn
}
/**
+ *
+ * @return <code>true</code> it the http provider checks the content type agains the keyword xml
+ */
+ public boolean isResponseContentTypeCheck() {
+ return responseContentTypeCheck;
+ }
+
+ /**
+ * Specifies if the http provider checks the response content type for the
+ * keyword xml. If it is true the provider will throw an exception if the content type
+ * does not contain the word xml. This should avoid that non valid xml is received by the
+ * provider endpoint and set as normalize message. Because the target expect to get an
+ * valid xml.
+ *
+ * @param responseContentTypeCheck
+ * @org.apache.xbean.Property description="Specifies if the http provider checks the response content type for the
+ * keyword xml. If it is true the provider will throw an exception if the content type
+ * does not contain the word xml. This should avoid that non valid xml is received by the
+ * provider endpoint and set as normalize message. Because the target expect to get an
+ * valid xml"
+ */
+ public void setResponseContentTypeCheck(boolean responseContentTypeCheck) {
+ this.responseContentTypeCheck = responseContentTypeCheck;
+ }
+
+ /**
* @return the synchronous
*/
public boolean isSynchronous() {
Modified: servicemix/components/trunk/bindings/servicemix-http/src/main/java/org/apache/servicemix/http/processors/ProviderProcessor.java
URL: http://svn.apache.org/viewvc/servicemix/components/trunk/bindings/servicemix-http/src/main/java/org/apache/servicemix/http/processors/ProviderProcessor.java?rev=1063719&r1=1063718&r2=1063719&view=diff
==============================================================================
--- servicemix/components/trunk/bindings/servicemix-http/src/main/java/org/apache/servicemix/http/processors/ProviderProcessor.java (original)
+++ servicemix/components/trunk/bindings/servicemix-http/src/main/java/org/apache/servicemix/http/processors/ProviderProcessor.java Wed Jan 26 13:52:02 2011
@@ -163,10 +163,15 @@ public class ProviderProcessor extends A
}
// Execute the HTTP method
int response = getClient().executeMethod(getHostConfiguration(locationURI, exchange, nm), method);
+ Header contentType = method.getResponseHeader(HEADER_CONTENT_TYPE);
+ // if true check if xml is contained (it is actually not enough) and if not it will throw an exception
+ // with the complete response is logged.
+ if (endpoint.isResponseContentTypeCheck() && !contentType.toExternalForm().contains("xml")) {
+ throw new Exception(method.getResponseBodyAsString());
+ }
if (response != HttpStatus.SC_OK && response != HttpStatus.SC_ACCEPTED) {
if (!(exchange instanceof InOnly)) {
SoapReader reader = soapHelper.getSoapMarshaler().createReader();
- Header contentType = method.getResponseHeader(HEADER_CONTENT_TYPE);
soapMessage = reader.read(method.getResponseBodyAsStream(),
contentType != null ? contentType.getValue() : null);
context.setFaultMessage(soapMessage);