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 2013/08/14 18:52:51 UTC

svn commit: r1513960 - in /cxf/trunk: rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/interceptor/ systests/jaxws/ systests/jaxws/src/test/java/org/apache/cxf/systest/jaxws/ systests/jaxws/src/test/resources/wsdl_systest_jaxws/

Author: dkulp
Date: Wed Aug 14 16:52:50 2013
New Revision: 1513960

URL: http://svn.apache.org/r1513960
Log:
[CXF-5194] Testcase for validating header elements
Fix problem discovered of NOT validating outgoing headers.

Modified:
    cxf/trunk/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/interceptor/SoapOutInterceptor.java
    cxf/trunk/systests/jaxws/pom.xml
    cxf/trunk/systests/jaxws/src/test/java/org/apache/cxf/systest/jaxws/SchemaValidationClientServerTest.java
    cxf/trunk/systests/jaxws/src/test/java/org/apache/cxf/systest/jaxws/ServicePortTypeImpl.java
    cxf/trunk/systests/jaxws/src/test/resources/wsdl_systest_jaxws/request.xsd
    cxf/trunk/systests/jaxws/src/test/resources/wsdl_systest_jaxws/schemaValidation.wsdl

Modified: cxf/trunk/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/interceptor/SoapOutInterceptor.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/interceptor/SoapOutInterceptor.java?rev=1513960&r1=1513959&r2=1513960&view=diff
==============================================================================
--- cxf/trunk/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/interceptor/SoapOutInterceptor.java (original)
+++ cxf/trunk/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/interceptor/SoapOutInterceptor.java Wed Aug 14 16:52:50 2013
@@ -27,10 +27,12 @@ import java.util.ResourceBundle;
 
 import javax.xml.stream.XMLStreamException;
 import javax.xml.stream.XMLStreamWriter;
+import javax.xml.validation.Schema;
 
 import org.w3c.dom.Element;
 
 import org.apache.cxf.Bus;
+import org.apache.cxf.annotations.SchemaValidation.SchemaValidationType;
 import org.apache.cxf.binding.soap.SoapFault;
 import org.apache.cxf.binding.soap.SoapHeader;
 import org.apache.cxf.binding.soap.SoapMessage;
@@ -43,6 +45,7 @@ import org.apache.cxf.databinding.DataWr
 import org.apache.cxf.headers.Header;
 import org.apache.cxf.headers.HeaderManager;
 import org.apache.cxf.headers.HeaderProcessor;
+import org.apache.cxf.helpers.ServiceUtils;
 import org.apache.cxf.interceptor.Fault;
 import org.apache.cxf.io.WriteOnCloseOutputStream;
 import org.apache.cxf.message.Exchange;
@@ -57,6 +60,7 @@ import org.apache.cxf.service.model.Mess
 import org.apache.cxf.service.model.ServiceModelUtil;
 import org.apache.cxf.staxutils.DelegatingXMLStreamWriter;
 import org.apache.cxf.staxutils.StaxUtils;
+import org.apache.cxf.ws.addressing.EndpointReferenceUtils;
 
 public class SoapOutInterceptor extends AbstractSoapInterceptor {
     public static final String WROTE_ENVELOPE_START = "wrote.envelope.start";
@@ -264,9 +268,16 @@ public class SoapOutInterceptor extends 
                 .getName()));
         }
         dataWriter.setAttachments(message.getAttachments());
-
+        setDataWriterValidation(service, message, dataWriter);
         return dataWriter;
     }
+    private void setDataWriterValidation(Service service, Message message, DataWriter<?> writer) {
+        if (ServiceUtils.isSchemaValidationEnabled(SchemaValidationType.OUT, message)) {
+            Schema schema = EndpointReferenceUtils.getSchema(service.getServiceInfos().get(0),
+                                                             message.getExchange().getBus());
+            writer.setSchema(schema);
+        }
+    }
         
     public class SoapOutEndingInterceptor extends AbstractSoapInterceptor {
         public SoapOutEndingInterceptor() {

Modified: cxf/trunk/systests/jaxws/pom.xml
URL: http://svn.apache.org/viewvc/cxf/trunk/systests/jaxws/pom.xml?rev=1513960&r1=1513959&r2=1513960&view=diff
==============================================================================
--- cxf/trunk/systests/jaxws/pom.xml (original)
+++ cxf/trunk/systests/jaxws/pom.xml Wed Aug 14 16:52:50 2013
@@ -47,6 +47,7 @@
                             <testSourceRoot>${basedir}/target/generated/src/test/java</testSourceRoot>
                             <testWsdlRoot>${basedir}/src/test/resources/wsdl_systest_jaxws</testWsdlRoot>
                             <defaultOptions>
+                                <extendedSoapHeaders>true</extendedSoapHeaders>
                                 <validate>basic</validate>
                             </defaultOptions>
                         </configuration>

Modified: cxf/trunk/systests/jaxws/src/test/java/org/apache/cxf/systest/jaxws/SchemaValidationClientServerTest.java
URL: http://svn.apache.org/viewvc/cxf/trunk/systests/jaxws/src/test/java/org/apache/cxf/systest/jaxws/SchemaValidationClientServerTest.java?rev=1513960&r1=1513959&r2=1513960&view=diff
==============================================================================
--- cxf/trunk/systests/jaxws/src/test/java/org/apache/cxf/systest/jaxws/SchemaValidationClientServerTest.java (original)
+++ cxf/trunk/systests/jaxws/src/test/java/org/apache/cxf/systest/jaxws/SchemaValidationClientServerTest.java Wed Aug 14 16:52:50 2013
@@ -32,12 +32,14 @@ import org.apache.cxf.interceptor.Loggin
 import org.apache.cxf.jaxws.EndpointImpl;
 import org.apache.cxf.jaxws.schemavalidation.CkRequestType;
 import org.apache.cxf.jaxws.schemavalidation.CkResponseType;
+import org.apache.cxf.jaxws.schemavalidation.RequestHeader;
 import org.apache.cxf.jaxws.schemavalidation.RequestIdType;
 import org.apache.cxf.jaxws.schemavalidation.Service;
 import org.apache.cxf.jaxws.schemavalidation.ServicePortType;
 import org.apache.cxf.message.Message;
 import org.apache.cxf.testutil.common.AbstractBusClientServerTestBase;
 import org.apache.cxf.testutil.common.AbstractBusTestServerBase;
+
 import org.junit.BeforeClass;
 import org.junit.Test;
 
@@ -101,19 +103,48 @@ public class SchemaValidationClientServe
         CkRequestType request = new CkRequestType();
         request.setRequest(requestId);
         ((BindingProvider)greeter).getRequestContext().put(Message.SCHEMA_VALIDATION_ENABLED, Boolean.TRUE);
-        CkResponseType response = greeter.ckR(request); 
+        RequestHeader header = new RequestHeader();
+        header.setHeaderValue("AABBCC");
+        CkResponseType response = greeter.ckR(request, header); 
         assertEquals(response.getProduct().get(0).getAction().getStatus(), 4);
         
         try {
             requestId.setId("aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeeez");
             request.setRequest(requestId);
-            greeter.ckR(request);
+            greeter.ckR(request, header);
             fail("should catch marshall exception as the invalid outgoing message per schema");
         } catch (Exception e) {
             assertTrue(e.getMessage().contains("Marshalling Error"));
             assertTrue(e.getMessage().contains("is not facet-valid with respect to pattern"));
         }
+
+        try {
+            requestId.setId("aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee");
+            request.setRequest(requestId);
+            header.setHeaderValue("AABBCCDDEEFFGGHHIIJJ");
+            
+            //Check if incoming validation on server side works, turn off outgoing
+            greeter.ckR(request, header);
+            fail("should catch marshall exception as the invalid outgoing message per schema");
+        } catch (Exception e) {
+            assertTrue(e.getMessage().contains("Marshalling Error"));
+            assertTrue(e.getMessage().contains("is not facet-valid with respect to maxLength"));
+        }
+        
+        try {
+            requestId.setId("aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee");
+            request.setRequest(requestId);
+            header.setHeaderValue("AABBCCDDEEFFGGHHIIJJ");
             
+            //Check if incoming validation on server side works, turn off outgoing
+            ((BindingProvider)greeter).getRequestContext().put(Message.SCHEMA_VALIDATION_ENABLED, Boolean.FALSE);
+            greeter.ckR(request, header);
+            fail("should catch marshall exception as the invalid outgoing message per schema");
+        } catch (Exception e) {
+            assertTrue(e.getMessage().contains("Could not validate soapheader "));
+            assertTrue(e.getMessage().contains("is not facet-valid with respect to maxLength"));
+        }
+        
     }
     
 }

Modified: cxf/trunk/systests/jaxws/src/test/java/org/apache/cxf/systest/jaxws/ServicePortTypeImpl.java
URL: http://svn.apache.org/viewvc/cxf/trunk/systests/jaxws/src/test/java/org/apache/cxf/systest/jaxws/ServicePortTypeImpl.java?rev=1513960&r1=1513959&r2=1513960&view=diff
==============================================================================
--- cxf/trunk/systests/jaxws/src/test/java/org/apache/cxf/systest/jaxws/ServicePortTypeImpl.java (original)
+++ cxf/trunk/systests/jaxws/src/test/java/org/apache/cxf/systest/jaxws/ServicePortTypeImpl.java Wed Aug 14 16:52:50 2013
@@ -22,12 +22,13 @@ import org.apache.cxf.jaxws.schemavalida
 import org.apache.cxf.jaxws.schemavalidation.CkRequestType;
 import org.apache.cxf.jaxws.schemavalidation.CkResponseType;
 import org.apache.cxf.jaxws.schemavalidation.ProductPostActionType;
+import org.apache.cxf.jaxws.schemavalidation.RequestHeader;
 import org.apache.cxf.jaxws.schemavalidation.ServicePortType;
 
 @javax.xml.ws.BindingType(value = "http://www.w3.org/2003/05/soap/bindings/HTTP/")
 public class ServicePortTypeImpl implements ServicePortType {
     
-    public CkResponseType ckR(CkRequestType ckRIn) {
+    public CkResponseType ckR(CkRequestType ckRIn, RequestHeader header) {
         CkResponseType result = new CkResponseType();
         ActionCheckMajType action = new ActionCheckMajType();
         action.setStatus(4);
@@ -36,4 +37,5 @@ public class ServicePortTypeImpl impleme
         result.getProduct().add(pdt);
         return result;
     }
+
 }

Modified: cxf/trunk/systests/jaxws/src/test/resources/wsdl_systest_jaxws/request.xsd
URL: http://svn.apache.org/viewvc/cxf/trunk/systests/jaxws/src/test/resources/wsdl_systest_jaxws/request.xsd?rev=1513960&r1=1513959&r2=1513960&view=diff
==============================================================================
--- cxf/trunk/systests/jaxws/src/test/resources/wsdl_systest_jaxws/request.xsd (original)
+++ cxf/trunk/systests/jaxws/src/test/resources/wsdl_systest_jaxws/request.xsd Wed Aug 14 16:52:50 2013
@@ -38,4 +38,17 @@
 			</xsd:element>
 		</xsd:sequence>
 	</xsd:complexType>
+    
+    <xsd:element name="RequestHeaderElement" type="RequestHeader"/>
+    <xsd:complexType name="RequestHeader">
+      <xsd:sequence>
+        <xsd:element name="HeaderValue">
+            <xsd:simpleType>
+                <xsd:restriction base="xsd:string">
+                    <xsd:maxLength value="10" />
+                </xsd:restriction>
+            </xsd:simpleType>
+        </xsd:element>
+      </xsd:sequence>
+    </xsd:complexType>    
 </xsd:schema>

Modified: cxf/trunk/systests/jaxws/src/test/resources/wsdl_systest_jaxws/schemaValidation.wsdl
URL: http://svn.apache.org/viewvc/cxf/trunk/systests/jaxws/src/test/resources/wsdl_systest_jaxws/schemaValidation.wsdl?rev=1513960&r1=1513959&r2=1513960&view=diff
==============================================================================
--- cxf/trunk/systests/jaxws/src/test/resources/wsdl_systest_jaxws/schemaValidation.wsdl (original)
+++ cxf/trunk/systests/jaxws/src/test/resources/wsdl_systest_jaxws/schemaValidation.wsdl Wed Aug 14 16:52:50 2013
@@ -27,6 +27,9 @@
 	
 	<wsdl:message name="ckRIn">
 		<wsdl:part name="ckRIn" element="tns:ckRequest"/>
+    </wsdl:message>
+    <wsdl:message name="ckRInHeader">
+        <wsdl:part name="header" element="tns:RequestHeaderElement"/>
 	</wsdl:message>
 	<wsdl:message name="ckROut">
 		<wsdl:part name="ckROut" element="tns:ckResponse"/>
@@ -45,6 +48,7 @@
 		<wsdl:operation name="ckR">
 		   <wsoap12:operation soapAction="ckR"/>
 		   <wsdl:input>
+                <wsoap12:header message="tns:ckRInHeader" part="header" use="literal"/>
 				<wsoap12:body parts="ckRIn" use="literal"/>
             </wsdl:input>
             <wsdl:output>