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);