You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@servicemix.apache.org by ff...@apache.org on 2009/08/13 11:35:17 UTC
svn commit: r803817 - in
/servicemix/components/bindings/servicemix-cxf-bc/trunk/src:
main/java/org/apache/servicemix/cxfbc/
main/java/org/apache/servicemix/cxfbc/interceptors/
test/java/org/apache/servicemix/cxfbc/
test/resources/org/apache/servicemix...
Author: ffang
Date: Thu Aug 13 09:35:16 2009
New Revision: 803817
URL: http://svn.apache.org/viewvc?rev=803817&view=rev
Log:
[SMXCOMP-616]add schemaValidationEnabled flag for cxf bc provider
Modified:
servicemix/components/bindings/servicemix-cxf-bc/trunk/src/main/java/org/apache/servicemix/cxfbc/CxfBcProvider.java
servicemix/components/bindings/servicemix-cxf-bc/trunk/src/main/java/org/apache/servicemix/cxfbc/CxfBcProviderMessageObserver.java
servicemix/components/bindings/servicemix-cxf-bc/trunk/src/main/java/org/apache/servicemix/cxfbc/interceptors/AbstractSchemaValidationInterceptor.java
servicemix/components/bindings/servicemix-cxf-bc/trunk/src/test/java/org/apache/servicemix/cxfbc/CxfBcProviderTest.java
servicemix/components/bindings/servicemix-cxf-bc/trunk/src/test/java/org/apache/servicemix/cxfbc/GreeterImplForProvider.java
servicemix/components/bindings/servicemix-cxf-bc/trunk/src/test/resources/org/apache/servicemix/cxfbc/provider.xml
servicemix/components/bindings/servicemix-cxf-bc/trunk/src/test/resources/org/apache/servicemix/cxfbc/provider/xbean.xml
Modified: servicemix/components/bindings/servicemix-cxf-bc/trunk/src/main/java/org/apache/servicemix/cxfbc/CxfBcProvider.java
URL: http://svn.apache.org/viewvc/servicemix/components/bindings/servicemix-cxf-bc/trunk/src/main/java/org/apache/servicemix/cxfbc/CxfBcProvider.java?rev=803817&r1=803816&r2=803817&view=diff
==============================================================================
--- servicemix/components/bindings/servicemix-cxf-bc/trunk/src/main/java/org/apache/servicemix/cxfbc/CxfBcProvider.java (original)
+++ servicemix/components/bindings/servicemix-cxf-bc/trunk/src/main/java/org/apache/servicemix/cxfbc/CxfBcProvider.java Thu Aug 13 09:35:16 2009
@@ -107,6 +107,7 @@
import org.apache.servicemix.cxfbc.interceptors.JbiOutWsdl1Interceptor;
import org.apache.servicemix.cxfbc.interceptors.MtomCheckInterceptor;
import org.apache.servicemix.cxfbc.interceptors.JbiFault;
+import org.apache.servicemix.cxfbc.interceptors.SchemaValidationOutInterceptor;
import org.apache.servicemix.cxfbc.interceptors.CxfJbiConstants;
import org.apache.servicemix.jbi.jaxp.SourceTransformer;
import org.apache.servicemix.soap.util.DomUtil;
@@ -154,6 +155,8 @@
private boolean useSOAPEnvelope = true;
private boolean synchronous = true;
+
+ private boolean schemaValidationEnabled;
private List<AbstractFeature> features = new CopyOnWriteArrayList<AbstractFeature>();
@@ -212,8 +215,11 @@
outList.add(new AttachmentOutInterceptor());
}
-
+
outList.add(new JbiOutInterceptor());
+ if (isSchemaValidationEnabled()) {
+ outList.add(new SchemaValidationOutInterceptor(isUseJBIWrapper(), isUseSOAPEnvelope()));
+ }
outList.add(new JbiOutWsdl1Interceptor(isUseJBIWrapper(), isUseSOAPEnvelope()));
outList.add(new SoapPreProtocolOutInterceptor());
outList.add(new SoapOutInterceptor(getBus()));
@@ -724,5 +730,21 @@
public List<AbstractFeature> getFeatures() {
return features;
}
-
+
+ public boolean isSchemaValidationEnabled() {
+ return schemaValidationEnabled;
+ }
+
+ /**
+ * Specifies if the endpoint use schemavalidation for the incoming/outgoing message.
+ *
+ * @param schemaValidationEnabled
+ * a boolean
+ * @org.apache.xbean.Property description="Specifies if the endpoint use schemavalidation for the incoming/outgoing message.
+ * Default is <code>false</code>.
+ */
+
+ public void setSchemaValidationEnabled(boolean schemaValidationEnabled) {
+ this.schemaValidationEnabled = schemaValidationEnabled;
+ }
}
Modified: servicemix/components/bindings/servicemix-cxf-bc/trunk/src/main/java/org/apache/servicemix/cxfbc/CxfBcProviderMessageObserver.java
URL: http://svn.apache.org/viewvc/servicemix/components/bindings/servicemix-cxf-bc/trunk/src/main/java/org/apache/servicemix/cxfbc/CxfBcProviderMessageObserver.java?rev=803817&r1=803816&r2=803817&view=diff
==============================================================================
--- servicemix/components/bindings/servicemix-cxf-bc/trunk/src/main/java/org/apache/servicemix/cxfbc/CxfBcProviderMessageObserver.java (original)
+++ servicemix/components/bindings/servicemix-cxf-bc/trunk/src/main/java/org/apache/servicemix/cxfbc/CxfBcProviderMessageObserver.java Thu Aug 13 09:35:16 2009
@@ -55,7 +55,7 @@
import org.apache.cxf.transport.MessageObserver;
import org.apache.servicemix.common.JbiConstants;
import org.apache.servicemix.cxfbc.interceptors.JbiInWsdl1Interceptor;
-
+import org.apache.servicemix.cxfbc.interceptors.SchemaValidationInInterceptor;
public class CxfBcProviderMessageObserver implements MessageObserver {
ByteArrayOutputStream response = new ByteArrayOutputStream();
@@ -119,6 +119,10 @@
inList.add(new StaxInInterceptor());
inList.add(new JbiInWsdl1Interceptor(this.providerEndpoint.isUseJBIWrapper(),
this.providerEndpoint.isUseSOAPEnvelope()));
+ if (this.providerEndpoint.isSchemaValidationEnabled()) {
+ inList.add(new SchemaValidationInInterceptor(this.providerEndpoint.isUseJBIWrapper(),
+ this.providerEndpoint.isUseSOAPEnvelope()));
+ }
inList.add(new AttachmentInInterceptor());
PhaseInterceptorChain inChain = inboundChainCache.get(pm
.getInPhases(), inList);
@@ -126,7 +130,7 @@
soapMessage.setInterceptorChain(inChain);
inChain.doIntercept(soapMessage);
closeConnectionStream(soapMessage);
- if (soapMessage.getContent(Source.class) == null) {
+ if (soapMessage.getContent(Exception.class) != null || soapMessage.getContent(Source.class) == null) {
Exception ex = soapMessage.getContent(Exception.class);
if (!(soapMessage.getExchange().get(MessageExchange.class) instanceof InOnly) && ex != null) {
messageExchange.setStatus(ExchangeStatus.ERROR);
Modified: servicemix/components/bindings/servicemix-cxf-bc/trunk/src/main/java/org/apache/servicemix/cxfbc/interceptors/AbstractSchemaValidationInterceptor.java
URL: http://svn.apache.org/viewvc/servicemix/components/bindings/servicemix-cxf-bc/trunk/src/main/java/org/apache/servicemix/cxfbc/interceptors/AbstractSchemaValidationInterceptor.java?rev=803817&r1=803816&r2=803817&view=diff
==============================================================================
--- servicemix/components/bindings/servicemix-cxf-bc/trunk/src/main/java/org/apache/servicemix/cxfbc/interceptors/AbstractSchemaValidationInterceptor.java (original)
+++ servicemix/components/bindings/servicemix-cxf-bc/trunk/src/main/java/org/apache/servicemix/cxfbc/interceptors/AbstractSchemaValidationInterceptor.java Thu Aug 13 09:35:16 2009
@@ -50,6 +50,7 @@
javax.xml.validation.Validator validator = schema.newValidator();
try {
Element sourceMessage = new SourceTransformer().toDOMElement(message.getContent(Source.class));
+ message.setContent(Source.class, new DOMSource(sourceMessage));
if (!useJBIWrapper && !useSOAPEnvelope) {
validator.validate(new DOMSource(sourceMessage));
} else {
Modified: servicemix/components/bindings/servicemix-cxf-bc/trunk/src/test/java/org/apache/servicemix/cxfbc/CxfBcProviderTest.java
URL: http://svn.apache.org/viewvc/servicemix/components/bindings/servicemix-cxf-bc/trunk/src/test/java/org/apache/servicemix/cxfbc/CxfBcProviderTest.java?rev=803817&r1=803816&r2=803817&view=diff
==============================================================================
--- servicemix/components/bindings/servicemix-cxf-bc/trunk/src/test/java/org/apache/servicemix/cxfbc/CxfBcProviderTest.java (original)
+++ servicemix/components/bindings/servicemix-cxf-bc/trunk/src/test/java/org/apache/servicemix/cxfbc/CxfBcProviderTest.java Thu Aug 13 09:35:16 2009
@@ -207,8 +207,36 @@
service = endpoint.getEndpointInfo().getService();
assertNotNull(service);
-
-
+ //test schemavalidation
+ factory = new JaxWsServerFactoryBean();
+ factory.setServiceClass(org.apache.hello_world_soap_http_provider.Greeter.class);
+ factory.setServiceBean(new org.apache.servicemix.cxfbc.provider.GreeterImpl());
+ address = "http://localhost:9008/schemavalidation";
+ factory.setAddress(address);
+ server = factory.create();
+ endpoint = server.getEndpoint();
+ endpoint.getInInterceptors().add(new LoggingInInterceptor());
+ endpoint.getOutInterceptors().add(new LoggingOutInterceptor());
+ service = endpoint.getEndpointInfo().getService();
+ assertNotNull(service);
+ io = client.createInOutExchange();
+ io.setService(new QName("http://apache.org/hello_world_soap_http", "SOAPServiceProvider"));
+ io.setInterfaceName(new QName("http://apache.org/hello_world_soap_http", "Greeter"));
+ //send message to proxy
+ io.getInMessage().setContent(new StringSource(
+ "<message xmlns='http://java.sun.com/xml/ns/jbi/wsdl-11-wrapper'>"
+ + "<part> "
+ + "<greetMe xmlns='http://apache.org/hello_world_soap_http/types'><requestType>"
+ + "schemavalidation"
+ + "</requestType></greetMe>"
+ + "</part> "
+ + "</message>"));
+ client.sendSync(io);
+ client.done(io);
+ assertTrue(new SourceTransformer().contentToString(
+ io.getOutMessage()).indexOf("is not facet-valid with respect to maxLength '30' for type 'MyStringType'.") >= 0);
+
+
//test soap header using helloworld
io = client.createInOutExchange();
io.setService(new QName("http://apache.org/hello_world_soap_http", "SOAPServiceProvider"));
Modified: servicemix/components/bindings/servicemix-cxf-bc/trunk/src/test/java/org/apache/servicemix/cxfbc/GreeterImplForProvider.java
URL: http://svn.apache.org/viewvc/servicemix/components/bindings/servicemix-cxf-bc/trunk/src/test/java/org/apache/servicemix/cxfbc/GreeterImplForProvider.java?rev=803817&r1=803816&r2=803817&view=diff
==============================================================================
--- servicemix/components/bindings/servicemix-cxf-bc/trunk/src/test/java/org/apache/servicemix/cxfbc/GreeterImplForProvider.java (original)
+++ servicemix/components/bindings/servicemix-cxf-bc/trunk/src/test/java/org/apache/servicemix/cxfbc/GreeterImplForProvider.java Thu Aug 13 09:35:16 2009
@@ -58,6 +58,7 @@
private Greeter securityGreeter;
private HelloPortType hello;
private TestMtom mtom;
+ private org.apache.hello_world_soap_http_provider.Greeter providerGreeter;
public String greetMe(String me) {
String ret = "";
@@ -70,6 +71,12 @@
} else if ("oneway test".equals(me)) {
getGreeter().greetMeOneWay("oneway");
ret = "oneway";
+ } else if ("schemavalidation".equals(me)) {
+ try {
+ ret = getProviderGreeter().greetMe("schemavalidation");
+ } catch (Exception e) {
+ ret = e.getMessage();
+ }
} else if ("header test".equals(me)) {
HelloRequest req = new HelloRequest();
req.setText("12");
@@ -84,7 +91,6 @@
for (int i = 0; i < clients.length; i++) {
clients[i] = new MultiClientThread(getCalculator(), i);
}
-
for (int i = 0; i < clients.length; i++) {
clients[i].start();
}
@@ -287,6 +293,14 @@
return mtom;
}
+ public void setProviderGreeter(org.apache.hello_world_soap_http_provider.Greeter providerGreeter) {
+ this.providerGreeter = providerGreeter;
+ }
+
+ public org.apache.hello_world_soap_http_provider.Greeter getProviderGreeter() {
+ return providerGreeter;
+ }
+
class MultiClientThread extends Thread {
private CalculatorPortType port;
Modified: servicemix/components/bindings/servicemix-cxf-bc/trunk/src/test/resources/org/apache/servicemix/cxfbc/provider.xml
URL: http://svn.apache.org/viewvc/servicemix/components/bindings/servicemix-cxf-bc/trunk/src/test/resources/org/apache/servicemix/cxfbc/provider.xml?rev=803817&r1=803816&r2=803817&view=diff
==============================================================================
--- servicemix/components/bindings/servicemix-cxf-bc/trunk/src/test/resources/org/apache/servicemix/cxfbc/provider.xml (original)
+++ servicemix/components/bindings/servicemix-cxf-bc/trunk/src/test/resources/org/apache/servicemix/cxfbc/provider.xml Thu Aug 13 09:35:16 2009
@@ -24,6 +24,7 @@
xmlns:hello="uri:HelloWorld"
xmlns:calculator="http://apache.org/cxf/calculator"
xmlns:greeter="http://apache.org/hello_world_soap_http"
+ xmlns:provider_greeter="http://apache.org/hello_world_soap_http_provider"
xmlns:mtom="http://cxf.apache.org/mime">
<sm:container id="jbi" embedded="true">
@@ -72,6 +73,28 @@
</cxfbc:outFaultInterceptors>
</cxfbc:provider>
+ <cxfbc:provider wsdl="hello_world.wsdl"
+ locationURI="http://localhost:9008/schemavalidation"
+ endpoint="SoapPort"
+ service="provider_greeter:SOAPService"
+ interfaceName="provider_greeter:Greeter"
+ schemaValidationEnabled="true"
+ >
+ <cxfbc:inInterceptors>
+ <bean class="org.apache.cxf.interceptor.LoggingInInterceptor"/>
+ </cxfbc:inInterceptors>
+ <cxfbc:outInterceptors>
+ <bean class="org.apache.cxf.interceptor.LoggingOutInterceptor"/>
+ </cxfbc:outInterceptors>
+ <cxfbc:inFaultInterceptors>
+ <bean class="org.apache.cxf.interceptor.LoggingInInterceptor"/>
+ </cxfbc:inFaultInterceptors>
+ <cxfbc:outFaultInterceptors>
+ <bean class="org.apache.cxf.interceptor.LoggingOutInterceptor"/>
+ </cxfbc:outFaultInterceptors>
+ </cxfbc:provider>
+
+
<cxfbc:provider wsdl="/HelloWorld-DOC.wsdl"
locationURI="http://localhost:9003/helloWorld"
endpoint="HelloPortProxy"
Modified: servicemix/components/bindings/servicemix-cxf-bc/trunk/src/test/resources/org/apache/servicemix/cxfbc/provider/xbean.xml
URL: http://svn.apache.org/viewvc/servicemix/components/bindings/servicemix-cxf-bc/trunk/src/test/resources/org/apache/servicemix/cxfbc/provider/xbean.xml?rev=803817&r1=803816&r2=803817&view=diff
==============================================================================
--- servicemix/components/bindings/servicemix-cxf-bc/trunk/src/test/resources/org/apache/servicemix/cxfbc/provider/xbean.xml (original)
+++ servicemix/components/bindings/servicemix-cxf-bc/trunk/src/test/resources/org/apache/servicemix/cxfbc/provider/xbean.xml Thu Aug 13 09:35:16 2009
@@ -24,6 +24,7 @@
xmlns:hello="uri:HelloWorld"
xmlns:calculator="http://apache.org/cxf/calculator"
xmlns:greeter="http://apache.org/hello_world_soap_http"
+ xmlns:provider_greeter="http://apache.org/hello_world_soap_http_provider"
xmlns:mtom="http://cxf.apache.org/mime">
@@ -39,6 +40,10 @@
<property name="greeter">
<cxfse:proxy service="greetr:SOAPService" context="#context" type="org.apache.hello_world_soap_http.Greeter"/>
</property>
+ <property name="providerGreeter">
+ <cxfse:proxy service="provider_greetr:SOAPService" context="#context" type="org.apache.hello_world_soap_http_provider.Greeter"/>
+ </property>
+
<property name="hello">
<cxfse:proxy service="hello:HelloService" context="#context" type="uri.helloworld.HelloPortType"/>
</property>