You are viewing a plain text version of this content. The canonical link for it is here.
Posted to java-dev@axis.apache.org by wo...@apache.org on 2008/03/03 19:48:24 UTC

svn commit: r633234 [3/24] - in /webservices/axis2/trunk/java: ./ modules/jaxws-integration/ modules/jaxws-integration/test/ modules/jaxws-integration/test/client/ modules/jaxws-integration/test/org/ modules/jaxws-integration/test/org/apache/ modules/j...

Added: webservices/axis2/trunk/java/modules/jaxws-integration/test/org/apache/axis2/jaxws/attachments/MTOMSerializationTests.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/jaxws-integration/test/org/apache/axis2/jaxws/attachments/MTOMSerializationTests.java?rev=633234&view=auto
==============================================================================
--- webservices/axis2/trunk/java/modules/jaxws-integration/test/org/apache/axis2/jaxws/attachments/MTOMSerializationTests.java (added)
+++ webservices/axis2/trunk/java/modules/jaxws-integration/test/org/apache/axis2/jaxws/attachments/MTOMSerializationTests.java Mon Mar  3 10:47:38 2008
@@ -0,0 +1,189 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.axis2.jaxws.attachments;
+
+import java.awt.*;
+import java.io.ByteArrayOutputStream;
+import java.io.File;
+
+import javax.activation.DataHandler;
+import javax.activation.DataSource;
+import javax.imageio.ImageIO;
+import javax.imageio.stream.FileImageInputStream;
+import javax.imageio.stream.ImageInputStream;
+import javax.xml.bind.JAXBContext;
+
+import junit.framework.TestCase;
+import org.apache.axiom.om.OMAbstractFactory;
+import org.apache.axiom.om.OMElement;
+import org.apache.axiom.om.OMFactory;
+import org.apache.axiom.om.OMNamespace;
+import org.apache.axiom.om.OMOutputFormat;
+import org.apache.axiom.om.OMText;
+import org.apache.axiom.soap.SOAPBody;
+import org.apache.axiom.soap.SOAPEnvelope;
+import org.apache.axiom.soap.SOAPFactory;
+import org.apache.axiom.soap.impl.llom.soap11.SOAP11Factory;
+import org.apache.axis2.jaxws.message.Block;
+import org.apache.axis2.jaxws.message.Message;
+import org.apache.axis2.jaxws.message.Protocol;
+import org.apache.axis2.jaxws.message.databinding.JAXBBlockContext;
+import org.apache.axis2.jaxws.message.factory.BlockFactory;
+import org.apache.axis2.jaxws.message.factory.JAXBBlockFactory;
+import org.apache.axis2.jaxws.message.factory.MessageFactory;
+import org.apache.axis2.jaxws.provider.DataSourceImpl;
+import org.apache.axis2.jaxws.registry.FactoryRegistry;
+import org.apache.axis2.jaxws.TestLogger;
+import org.test.mtom.ImageDepot;
+import org.test.mtom.ObjectFactory;
+import org.test.mtom.SendImage;
+
+public class MTOMSerializationTests extends TestCase {
+
+    private DataSource imageDS;
+    
+    public void setUp() throws Exception {
+        String imageResourceDir = System.getProperty("basedir",".")+"/"+"test-resources"+File.separator+"image";
+        
+        //Create a DataSource from an image 
+        File file = new File(imageResourceDir+File.separator+"test.jpg");
+        ImageInputStream fiis = new FileImageInputStream(file);
+        Image image = ImageIO.read(fiis);
+        imageDS = new DataSourceImpl("image/jpeg","test.jpg",image);
+    }
+    
+    public MTOMSerializationTests(String name) {
+        super(name);
+    }
+    
+    /*
+     * Simulate building up an OM that is sourced from JAXB and contains
+     * binary data that should be optimized when serialized.  
+     */
+    public void testPlainOMSerialization() throws Exception {
+        TestLogger.logger.debug("---------------------------------------");
+        TestLogger.logger.debug("test: " + getName());
+        
+        OMElement payload = createPayload();
+        
+        OMOutputFormat format = new OMOutputFormat();
+        format.setDoOptimize(true);
+        format.setSOAP11(true);
+               
+        ByteArrayOutputStream baos = new ByteArrayOutputStream();
+        payload.serializeAndConsume(baos, format);
+
+        TestLogger.logger.debug("==================================");
+        TestLogger.logger.debug(baos.toString());
+        TestLogger.logger.debug("==================================");
+    }
+    
+    /*
+     * Simulate building up an OM SOAPEnvelope that has the contents of
+     * the body sourced from JAXB and contains binary data that should be 
+     * optimized when serialized.  
+     */
+    public void testSoapOMSerialization() throws Exception {
+        TestLogger.logger.debug("---------------------------------------");
+        TestLogger.logger.debug("test: " + getName());
+        
+        OMElement payload = createPayload();
+        
+        SOAPFactory factory = new SOAP11Factory();
+        SOAPEnvelope env = factory.createSOAPEnvelope();
+        SOAPBody body = factory.createSOAPBody(env);
+        
+        body.addChild(payload);
+        
+        OMOutputFormat format = new OMOutputFormat();
+        format.setDoOptimize(true);
+        format.setSOAP11(true);
+               
+        ByteArrayOutputStream baos = new ByteArrayOutputStream();
+        env.serializeAndConsume(baos, format);
+
+        TestLogger.logger.debug("==================================");
+        TestLogger.logger.debug(baos.toString());
+        TestLogger.logger.debug("==================================");
+    }
+    
+    public void testMTOMAttachmentWriter() throws Exception {
+        TestLogger.logger.debug("---------------------------------------");
+        TestLogger.logger.debug("test: " + getName());
+        
+        //Create a DataHandler with the String DataSource object
+        DataHandler dataHandler = new DataHandler(imageDS);
+                        
+        //Store the data handler in ImageDepot bean
+        ImageDepot imageDepot = new ObjectFactory().createImageDepot();
+        imageDepot.setImageData(dataHandler);
+        
+        //JAXBContext jbc = JAXBContext.newInstance("org.test.mtom");
+        JAXBBlockContext context = new JAXBBlockContext(SendImage.class.getPackage().getName());
+        
+        //Create a request bean with imagedepot bean as value
+        ObjectFactory factory = new ObjectFactory();
+        SendImage request = factory.createSendImage();
+        request.setInput(imageDepot);
+        
+        BlockFactory blkFactory = (JAXBBlockFactory) FactoryRegistry.getFactory(JAXBBlockFactory.class);
+        Block block = blkFactory.createFrom(request, context, null);
+        
+        MessageFactory msgFactory = (MessageFactory) FactoryRegistry.getFactory(MessageFactory.class);
+        Message msg = msgFactory.create(Protocol.soap11);
+        
+        msg.setBodyBlock(block);
+        
+        msg.setMTOMEnabled(true);
+        
+        SOAPEnvelope soapOM = (SOAPEnvelope) msg.getAsOMElement();
+        
+        OMOutputFormat format = new OMOutputFormat();
+        format.setDoOptimize(true);
+        format.setSOAP11(true);
+               
+        ByteArrayOutputStream baos = new ByteArrayOutputStream();
+        soapOM.serializeAndConsume(baos, format);
+
+        TestLogger.logger.debug("==================================");
+        TestLogger.logger.debug(baos.toString());
+        TestLogger.logger.debug("==================================");
+    }
+    
+    private OMElement createPayload() {
+        //Create a DataHandler with the String DataSource object
+        DataHandler dataHandler = new DataHandler(imageDS);
+                        
+        OMFactory fac = OMAbstractFactory.getOMFactory();
+        OMNamespace omNs = fac.createOMNamespace("urn://mtom.test.org", "mtom");
+        
+        OMElement sendImage = fac.createOMElement("sendImage", omNs);
+        
+        OMElement input = fac.createOMElement("input", omNs);
+        sendImage.addChild(input);
+        
+        OMElement imageData = fac.createOMElement("imageData", omNs);
+        input.addChild(imageData);
+        
+        OMText binaryData = fac.createOMText(dataHandler, true);
+        imageData.addChild(binaryData);
+        
+        return sendImage;
+    }
+}

Added: webservices/axis2/trunk/java/modules/jaxws-integration/test/org/apache/axis2/jaxws/catalog/MultiRedirectionCatalogTest.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/jaxws-integration/test/org/apache/axis2/jaxws/catalog/MultiRedirectionCatalogTest.java?rev=633234&view=auto
==============================================================================
--- webservices/axis2/trunk/java/modules/jaxws-integration/test/org/apache/axis2/jaxws/catalog/MultiRedirectionCatalogTest.java (added)
+++ webservices/axis2/trunk/java/modules/jaxws-integration/test/org/apache/axis2/jaxws/catalog/MultiRedirectionCatalogTest.java Mon Mar  3 10:47:38 2008
@@ -0,0 +1,147 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *      
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.axis2.jaxws.catalog;
+
+import java.io.File;
+import java.net.MalformedURLException;
+import java.net.URL;
+
+import javax.wsdl.Definition;
+import javax.wsdl.Input;
+import javax.wsdl.Message;
+import javax.wsdl.Operation;
+import javax.wsdl.Part;
+import javax.wsdl.PortType;
+import javax.wsdl.WSDLException;
+import javax.xml.namespace.QName;
+
+import org.apache.axis2.jaxws.catalog.impl.OASISCatalogManager;
+import org.apache.axis2.jaxws.util.WSDL4JWrapper;
+
+import junit.framework.TestCase;
+
+/**
+ * Tests the use of the Apache Commons Resolver API to resolve URIs.
+ */
+public class MultiRedirectionCatalogTest extends TestCase {
+	private static final String ROOT_WSDL = "/test-resources/catalog/root.wsdl";
+	private static final String TEST_RESOURCES = "/test-resources/catalog/";
+	
+	public void testOneCatalogSuccess() {
+		verifySuccess(ROOT_WSDL, TEST_RESOURCES + "basic-catalog.xml");
+	}
+
+	public void testNextCatalogSuccess() {
+		verifySuccess(ROOT_WSDL, TEST_RESOURCES + "root-catalog.xml");
+	}
+	
+	public void testNextCatalogFailure() {
+		verifyFailure(ROOT_WSDL, TEST_RESOURCES + "fail/root-catalog.xml");		
+	}
+	
+	public void testNoCatEntryForFirstImport() {
+		verifyFailure(ROOT_WSDL, TEST_RESOURCES + "fail/firstImportFail.xml");
+	}
+	
+	public void testNoCatEntryForSecondImport() {
+		verifyFailure(ROOT_WSDL, TEST_RESOURCES + "fail/secondImportFail.xml");
+	}
+	
+	public void testNoCatEntryForThirdImport() {
+		verifyFailure(ROOT_WSDL, TEST_RESOURCES + "fail/thirdImportFail.xml");
+	}
+	
+	/**
+	 * Ensure that the catalog is used to locate imported resources.
+	 */
+	private void verifySuccess(String wsdlLocation, String catalogFile) {
+	    URL url = getURLFromLocation(wsdlLocation);
+	    
+	    try{
+			OASISCatalogManager catalogManager = new OASISCatalogManager();
+			catalogManager.setCatalogFiles(getURLFromLocation(catalogFile).toString());
+            WSDL4JWrapper w4j = new WSDL4JWrapper(url, catalogManager);
+	    	Definition wsdlDef = w4j.getDefinition();
+	    	assertNotNull(wsdlDef);   
+	    	QName portTypeName = new QName("http://www.example.com/test/calculator",
+	    			                       "CalculatorService",
+	    			                       "");
+	    	PortType portType = wsdlDef.getPortType(portTypeName);
+	    	assertNotNull(portType);
+	    	Operation clearOp = portType.getOperation("clear", null, null);
+	    	assertNotNull(clearOp);
+	    	Input clearOpInput = clearOp.getInput();
+	    	assertNotNull(clearOpInput);
+	    	Message msg = clearOpInput.getMessage();
+	    	assertNotNull(msg);
+	    	Part expectedPart = msg.getPart("part1");
+            assertNotNull(expectedPart);
+	    }catch(Exception e){
+	    	e.printStackTrace();
+	    	fail();
+	    }
+	}	
+	
+	/**
+	 * Ensure that the test case is valid by failing in the absence of a needed
+	 * catalog entry.
+	 */
+	private void verifyFailure(String wsdlLocation, String catalogFile) {
+	    URL url = getURLFromLocation(wsdlLocation);
+	    
+	    try{
+			OASISCatalogManager catalogManager = new OASISCatalogManager();
+            catalogManager.setCatalogFiles(getURLFromLocation(catalogFile).toString());
+	    	WSDL4JWrapper w4j = new WSDL4JWrapper(url, catalogManager);
+	    	w4j.getDefinition();
+	    	fail("Should have received a WSDLException due to the invalid WSDL location " 
+	        		+ "not redirected by the catalog.");
+	    } catch(WSDLException e) {
+	    	// do nothing - successful test case
+	    } catch(Exception e){
+	    	e.printStackTrace();
+	    	fail();
+	    }
+	}
+	
+	/**
+	 * Given a String representing a file location, return a URL.
+	 * @param wsdlLocation
+	 * @return
+	 */
+	private URL getURLFromLocation(String wsdlLocation) {
+		URL url = null;
+	    try {
+	    	try{
+	        	String baseDir = new File(System.getProperty("basedir",".")).getCanonicalPath();
+	        	wsdlLocation = new File(baseDir + wsdlLocation).getAbsolutePath();
+        	}catch(Exception e){
+        		e.printStackTrace();
+        		fail();
+        	}
+	       	File file = new File(wsdlLocation);
+	       	url = file.toURL();
+	    } catch (MalformedURLException e) {
+	        e.printStackTrace();
+	        fail();
+	    }
+	    
+	    return url;
+	}
+}

Added: webservices/axis2/trunk/java/modules/jaxws-integration/test/org/apache/axis2/jaxws/catalog/XMLCatalogTests.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/jaxws-integration/test/org/apache/axis2/jaxws/catalog/XMLCatalogTests.java?rev=633234&view=auto
==============================================================================
--- webservices/axis2/trunk/java/modules/jaxws-integration/test/org/apache/axis2/jaxws/catalog/XMLCatalogTests.java (added)
+++ webservices/axis2/trunk/java/modules/jaxws-integration/test/org/apache/axis2/jaxws/catalog/XMLCatalogTests.java Mon Mar  3 10:47:38 2008
@@ -0,0 +1,108 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *      
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.axis2.jaxws.catalog;
+
+import java.io.File;
+
+import javax.xml.namespace.QName;
+import javax.xml.parsers.DocumentBuilderFactory;
+
+import org.apache.axis2.jaxws.catalog.impl.OASISCatalogManager;
+import org.apache.axis2.jaxws.util.CatalogURIResolver;
+import org.apache.ws.commons.schema.XmlSchema;
+import org.apache.ws.commons.schema.XmlSchemaCollection;
+import org.w3c.dom.Document;
+
+import junit.framework.TestCase;
+
+/**
+ * Tests the use of the Apache Commons Resolver API to resolve URIs.
+ */
+public class XMLCatalogTests extends TestCase {
+	private static final String TEST_RESOURCES = "test-resources/catalog/";
+	private static final String BASIC_CATALOG = TEST_RESOURCES + "basic-catalog.xml";
+	private static final String IMPORT_BASE = TEST_RESOURCES + "importBase.xsd";
+	private static final String IMPORT_BAD = TEST_RESOURCES + "importBad.xsd";	
+
+    /**
+     * Verify that all the expected conditions are met (the control case).
+     * @throws Exception
+     */
+    public void testSchemaImportNoCatalogNoNeed() throws Exception{
+        File file = new File(IMPORT_BASE);
+        //create a DOM document
+        DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance();
+        documentBuilderFactory.setNamespaceAware(true);
+        Document doc = documentBuilderFactory.newDocumentBuilder().
+                parse(file.toURL().toString());
+
+        XmlSchemaCollection schemaCol = new XmlSchemaCollection();
+        XmlSchema schema = schemaCol.read(doc,file.toURL().toString(),null);
+        assertNotNull(schema);
+
+        assertNotNull(schema.getTypeByName(new QName("http://soapinterop.org/xsd2","SOAPStruct")));
+        assertNotNull(schema.getElementByName(new QName("http://soapinterop.org/xsd2","SOAPWrapper")));
+    }
+    
+    /**
+     * Verify that the element is not present when using IMPORT_BAD in the 
+     * absence of a CatalogManager.
+     * @throws Exception
+     */
+    public void testSchemaImportCatalogNeedNotPresent() throws Exception{
+        File file = new File(IMPORT_BAD);
+        //create a DOM document
+        DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance();
+        documentBuilderFactory.setNamespaceAware(true);
+        Document doc = documentBuilderFactory.newDocumentBuilder().
+                parse(file.toURL().toString());
+
+        XmlSchemaCollection schemaCol = new XmlSchemaCollection();
+        XmlSchema schema = schemaCol.read(doc,file.toURL().toString(),null);
+        assertNotNull(schema);
+
+        assertNotNull(schema.getTypeByName(new QName("http://soapinterop.org/xsd2","SOAPStruct")));
+        assertNull(schema.getElementByName(new QName("http://soapinterop.org/xsd2","SOAPWrapper")));
+    }
+    
+    /**
+     * Verify that the element is present using IMPORT_BAD if the XML Resolver 
+     * is used.  This test is for a simple, single-file catalog.
+     * @throws Exception
+     */
+    public void testSchemaImportBasicCatalog() throws Exception{
+		OASISCatalogManager catalogManager = new OASISCatalogManager();
+		catalogManager.setCatalogFiles(BASIC_CATALOG);
+		
+        File file = new File(IMPORT_BAD);
+        //create a DOM document
+        DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance();
+        documentBuilderFactory.setNamespaceAware(true);
+        Document doc = documentBuilderFactory.newDocumentBuilder().
+                parse(file.toURL().toString());
+
+        XmlSchemaCollection schemaCol = new XmlSchemaCollection();
+        schemaCol.setSchemaResolver(new CatalogURIResolver(catalogManager));
+        XmlSchema schema = schemaCol.read(doc,file.toURL().toString(),null);
+        assertNotNull(schema);
+
+        assertNotNull(schema.getTypeByName(new QName("http://soapinterop.org/xsd2","SOAPStruct")));
+        assertNotNull(schema.getElementByName(new QName("http://soapinterop.org/xsd2","SOAPWrapper")));
+    }
+}

Added: webservices/axis2/trunk/java/modules/jaxws-integration/test/org/apache/axis2/jaxws/client/ClientConfigTests.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/jaxws-integration/test/org/apache/axis2/jaxws/client/ClientConfigTests.java?rev=633234&view=auto
==============================================================================
--- webservices/axis2/trunk/java/modules/jaxws-integration/test/org/apache/axis2/jaxws/client/ClientConfigTests.java (added)
+++ webservices/axis2/trunk/java/modules/jaxws-integration/test/org/apache/axis2/jaxws/client/ClientConfigTests.java Mon Mar  3 10:47:38 2008
@@ -0,0 +1,72 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.axis2.jaxws.client;
+
+import java.io.File;
+import java.net.MalformedURLException;
+import java.net.URL;
+
+import javax.xml.namespace.QName;
+import javax.xml.ws.Dispatch;
+import javax.xml.ws.Service;
+import javax.xml.ws.Service.Mode;
+import javax.xml.ws.WebServiceException;
+
+import junit.framework.TestCase;
+import org.apache.axis2.jaxws.TestLogger;
+
+public class ClientConfigTests extends TestCase {
+
+    public ClientConfigTests(String name) {
+        super(name);
+    }
+    
+    public void testBadWsdlUrl() throws Exception {
+        
+        URL url = null;
+        String wsdlLocation = null;
+        try {
+            try{
+                String baseDir = new File(System.getProperty("basedir",".")).getCanonicalPath();
+                wsdlLocation = new File(baseDir + "/test-resources/wsdl/BadEndpointAddress.wsdl").getAbsolutePath();
+            }catch(Exception e){
+                e.printStackTrace();
+            }
+            File file = new File(wsdlLocation);
+            url = file.toURL();
+        } catch (MalformedURLException e) {
+            e.printStackTrace();
+        }
+        
+        Service svc = Service.create(url, new QName("http://jaxws.axis2.apache.org", "EchoService"));
+        Dispatch dispatch = svc.createDispatch(new QName("http://jaxws.axis2.apache.org", "EchoPort"), 
+                String.class, Mode.PAYLOAD);
+        
+        try {
+            dispatch.invoke("");
+            
+            // If an exception wasn't thrown, then it's an error.
+            fail();
+        } catch (WebServiceException e) {
+            // We should only get a WebServiceException here.  Anything else
+            // is a failure.
+            TestLogger.logger.debug("[pass] - the proper fault type was thrown");
+        }
+    }
+}

Added: webservices/axis2/trunk/java/modules/jaxws-integration/test/org/apache/axis2/jaxws/client/DispatchSoapActionTests.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/jaxws-integration/test/org/apache/axis2/jaxws/client/DispatchSoapActionTests.java?rev=633234&view=auto
==============================================================================
--- webservices/axis2/trunk/java/modules/jaxws-integration/test/org/apache/axis2/jaxws/client/DispatchSoapActionTests.java (added)
+++ webservices/axis2/trunk/java/modules/jaxws-integration/test/org/apache/axis2/jaxws/client/DispatchSoapActionTests.java Mon Mar  3 10:47:38 2008
@@ -0,0 +1,82 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.axis2.jaxws.client;
+
+import java.util.Map;
+
+import javax.xml.bind.JAXBContext;
+import javax.xml.bind.JAXBElement;
+import javax.xml.namespace.QName;
+import javax.xml.ws.Dispatch;
+import javax.xml.ws.Service.Mode;
+
+import junit.framework.TestCase;
+import org.apache.axis2.jaxws.BindingProvider;
+import org.apache.axis2.jaxws.TestLogger;
+import org.apache.axis2.jaxws.client.soapaction.BookStoreService;
+import org.apache.axis2.jaxws.client.soapaction.GetPriceResponseType;
+import org.apache.axis2.jaxws.client.soapaction.GetPriceType;
+import org.apache.axis2.jaxws.client.soapaction.ObjectFactory;
+
+/**
+ * A suite of SOAPAction related tests for the dispatch client 
+ */
+public class DispatchSoapActionTests extends TestCase {
+    
+    private static final String targetNamespace = "http://jaxws.axis2.apache.org/client/soapaction";
+    private static final String portName = "BookStorePort";
+        
+    /**
+     * Invoke an operation this is defined in the WSDL as having a SOAPAction.
+     * Since this is a Dispatch client, we'll need to specify that SOAPAction
+     * ourselves for the invoke.
+     */
+    public void testSendRequestWithSoapAction() throws Exception {
+        TestLogger.logger.debug("----------------------------------");
+        TestLogger.logger.debug("test: " + getName());
+        
+        BookStoreService service = new BookStoreService();
+        
+        JAXBContext ctx = JAXBContext.newInstance("org.apache.axis2.jaxws.client.soapaction");
+        Dispatch dispatch = service.createDispatch(new QName(targetNamespace, portName), 
+                ctx, Mode.PAYLOAD);
+        
+        Map<String, Object> requestCtx = dispatch.getRequestContext();
+        requestCtx.put(BindingProvider.SOAPACTION_USE_PROPERTY, Boolean.TRUE);
+        requestCtx.put(BindingProvider.SOAPACTION_URI_PROPERTY, "http://jaxws.axis2.apache.org/client/soapaction/getPrice");
+        
+        ObjectFactory of = new ObjectFactory();
+        GetPriceType gpt = of.createGetPriceType();
+        gpt.setItem("TEST");
+        
+        // The element that is sent should be <getPriceWithAction>
+        // so it will resolve to the getPriceWithAction operation
+        // defined in the WSDL.
+        JAXBElement<GetPriceType> getPrice = of.createGetPriceWithAction(gpt);
+        JAXBElement<GetPriceResponseType> getPriceResponse = (JAXBElement<GetPriceResponseType>) dispatch.invoke(getPrice);
+        
+        GetPriceResponseType value = getPriceResponse.getValue();
+        assertNotNull("The response was null", value);
+        
+        float price = value.getPrice();
+        TestLogger.logger.debug("return value [" + price + "]");
+        //assertTrue("The return value was invalid", price > 0);
+    }
+
+}

Added: webservices/axis2/trunk/java/modules/jaxws-integration/test/org/apache/axis2/jaxws/client/InterceptableClientTestCase.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/jaxws-integration/test/org/apache/axis2/jaxws/client/InterceptableClientTestCase.java?rev=633234&view=auto
==============================================================================
--- webservices/axis2/trunk/java/modules/jaxws-integration/test/org/apache/axis2/jaxws/client/InterceptableClientTestCase.java (added)
+++ webservices/axis2/trunk/java/modules/jaxws-integration/test/org/apache/axis2/jaxws/client/InterceptableClientTestCase.java Mon Mar  3 10:47:38 2008
@@ -0,0 +1,63 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.axis2.jaxws.client;
+
+import org.apache.axis2.jaxws.core.controller.InvocationControllerFactory;
+import org.apache.axis2.jaxws.registry.FactoryRegistry;
+
+import junit.framework.TestCase;
+
+/**
+ * This TestCase can be extended to write JAX-WS client side unit tests without 
+ * having to have an end-to-end test.  The <source>TestClientInvocationController</source>
+ * will be used to capture the request.  
+ */
+public class InterceptableClientTestCase extends TestCase {
+
+    private InvocationControllerFactory oldFactory;
+    private TestClientInvocationControllerFactory newFactory;
+    private TestClientInvocationController testController;
+    
+    @Override
+    protected void setUp() throws Exception {
+        super.setUp();
+        
+        InvocationControllerFactory icf = (InvocationControllerFactory) FactoryRegistry.getFactory(InvocationControllerFactory.class);
+        oldFactory = icf;
+        
+        testController = new TestClientInvocationController();
+        
+        newFactory = new TestClientInvocationControllerFactory();
+        newFactory.setInvocationController(testController);
+        
+        FactoryRegistry.setFactory(InvocationControllerFactory.class, newFactory);
+    }
+
+    @Override
+    protected void tearDown() throws Exception {
+        super.tearDown();
+
+        FactoryRegistry.setFactory(InvocationControllerFactory.class, oldFactory);
+    }
+    
+    protected TestClientInvocationController getInvocationController() {
+        return testController;
+    }
+    
+}

Added: webservices/axis2/trunk/java/modules/jaxws-integration/test/org/apache/axis2/jaxws/client/PropertyValueTests.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/jaxws-integration/test/org/apache/axis2/jaxws/client/PropertyValueTests.java?rev=633234&view=auto
==============================================================================
--- webservices/axis2/trunk/java/modules/jaxws-integration/test/org/apache/axis2/jaxws/client/PropertyValueTests.java (added)
+++ webservices/axis2/trunk/java/modules/jaxws-integration/test/org/apache/axis2/jaxws/client/PropertyValueTests.java Mon Mar  3 10:47:38 2008
@@ -0,0 +1,99 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.axis2.jaxws.client;
+
+import java.util.Map;
+
+import javax.xml.namespace.QName;
+import javax.xml.ws.BindingProvider;
+import javax.xml.ws.Dispatch;
+import javax.xml.ws.Service;
+import javax.xml.ws.Service.Mode;
+import javax.xml.ws.WebServiceException;
+
+import junit.framework.TestCase;
+import org.apache.axis2.jaxws.TestLogger;
+
+/**
+ * A suite to test the validation of the client request/response context properties
+ */
+public class PropertyValueTests extends TestCase {
+    
+    public PropertyValueTests(String name) {
+        super(name);
+    }
+    
+    public void testSetInvalidClientProperties() throws Exception {
+        Service svc = Service.create(new QName("http://test", "TestService"));
+        QName portQName = new QName("http://test", "TestPort");
+        svc.addPort(portQName, null, null);
+        Dispatch dispatch = svc.createDispatch(portQName, String.class, Mode.PAYLOAD);
+        
+        Map<String, Object> map = dispatch.getRequestContext();
+        
+        try {
+            map.put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY, new Integer(4));
+            fail();
+        }
+        catch (WebServiceException wse) {
+            TestLogger.logger.debug("[pass] - exception thrown as expected");
+        }
+
+        try {
+            map.put(BindingProvider.USERNAME_PROPERTY, new Integer(4));
+            fail();
+        }
+        catch (WebServiceException wse) {
+            TestLogger.logger.debug("[pass] - exception thrown as expected");
+        }
+        
+        try {
+            map.put(BindingProvider.PASSWORD_PROPERTY, new Integer(4));
+            fail();
+        }
+        catch (WebServiceException wse) {
+            TestLogger.logger.debug("[pass] - exception thrown as expected");
+        }
+
+        try {
+            map.put(BindingProvider.SESSION_MAINTAIN_PROPERTY, "true");
+            fail();
+        }
+        catch (WebServiceException wse) {
+            TestLogger.logger.debug("[pass] - exception thrown as expected");
+        }
+        
+        try {
+            map.put(BindingProvider.SOAPACTION_USE_PROPERTY, "true");
+            fail();
+        }
+        catch (WebServiceException wse) {
+            TestLogger.logger.debug("[pass] - exception thrown as expected");
+        }
+
+        try {
+            map.put(BindingProvider.SOAPACTION_URI_PROPERTY, new Integer(4));
+            fail();
+        }
+        catch (WebServiceException wse) {
+            TestLogger.logger.debug("[pass] - exception thrown as expected");
+        }
+    }
+
+}

Added: webservices/axis2/trunk/java/modules/jaxws-integration/test/org/apache/axis2/jaxws/client/ProxySoapActionTests.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/jaxws-integration/test/org/apache/axis2/jaxws/client/ProxySoapActionTests.java?rev=633234&view=auto
==============================================================================
--- webservices/axis2/trunk/java/modules/jaxws-integration/test/org/apache/axis2/jaxws/client/ProxySoapActionTests.java (added)
+++ webservices/axis2/trunk/java/modules/jaxws-integration/test/org/apache/axis2/jaxws/client/ProxySoapActionTests.java Mon Mar  3 10:47:38 2008
@@ -0,0 +1,47 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.axis2.jaxws.client;
+
+import junit.framework.TestCase;
+import org.apache.axis2.jaxws.client.soapaction.BookStore;
+import org.apache.axis2.jaxws.client.soapaction.BookStoreService;
+import org.apache.axis2.jaxws.TestLogger;
+
+/**
+ * A suite of SOAPAction related tests for the dynamic proxy client 
+ */
+public class ProxySoapActionTests extends TestCase {
+    
+    public ProxySoapActionTests(String name) {
+        super(name);
+    }
+    
+    public void testSendRequestWithSoapAction() {
+        TestLogger.logger.debug("----------------------------------");
+        TestLogger.logger.debug("test: " + getName());
+
+        BookStoreService service = new BookStoreService();
+        BookStore bs = service.getBookStorePort();
+        
+        float price = bs.getPriceWithAction("test item");
+        TestLogger.logger.debug("return value [" + price + "]");
+        //assertTrue("The return value was invalid", price > 0);
+    }
+
+}

Added: webservices/axis2/trunk/java/modules/jaxws-integration/test/org/apache/axis2/jaxws/client/TestClientInvocationController.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/jaxws-integration/test/org/apache/axis2/jaxws/client/TestClientInvocationController.java?rev=633234&view=auto
==============================================================================
--- webservices/axis2/trunk/java/modules/jaxws-integration/test/org/apache/axis2/jaxws/client/TestClientInvocationController.java (added)
+++ webservices/axis2/trunk/java/modules/jaxws-integration/test/org/apache/axis2/jaxws/client/TestClientInvocationController.java Mon Mar  3 10:47:38 2008
@@ -0,0 +1,66 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.axis2.jaxws.client;
+
+import org.apache.axis2.jaxws.core.InvocationContext;
+import org.apache.axis2.jaxws.core.MessageContext;
+import org.apache.axis2.jaxws.core.controller.InvocationController;
+
+import javax.xml.ws.AsyncHandler;
+import javax.xml.ws.Response;
+
+import java.util.concurrent.Future;
+
+public class TestClientInvocationController implements InvocationController {
+
+    private InvocationContext cachedCtx;
+    
+    public InvocationContext invoke(InvocationContext ic) {
+        cachedCtx = ic;
+        
+        MessageContext request = ic.getRequestMessageContext();        
+        MessageContext response = new MessageContext();
+        
+        response.setEndpointDescription(request.getEndpointDescription());
+        response.setMessage(request.getMessage());        
+        
+        ic.setResponseMessageContext(response);
+        return ic;
+    }
+
+    public Future<?> invokeAsync(InvocationContext ic, AsyncHandler asyncHandler) {
+        cachedCtx = ic;
+        return null;
+    }
+
+    public Response invokeAsync(InvocationContext ic) {
+        cachedCtx = ic;
+        return null;
+    }
+
+    public void invokeOneWay(InvocationContext ic) throws Exception {
+        cachedCtx = ic;
+
+    }
+    
+    public InvocationContext getInvocationContext() {
+        return cachedCtx;
+    }
+
+}

Added: webservices/axis2/trunk/java/modules/jaxws-integration/test/org/apache/axis2/jaxws/client/TestClientInvocationControllerFactory.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/jaxws-integration/test/org/apache/axis2/jaxws/client/TestClientInvocationControllerFactory.java?rev=633234&view=auto
==============================================================================
--- webservices/axis2/trunk/java/modules/jaxws-integration/test/org/apache/axis2/jaxws/client/TestClientInvocationControllerFactory.java (added)
+++ webservices/axis2/trunk/java/modules/jaxws-integration/test/org/apache/axis2/jaxws/client/TestClientInvocationControllerFactory.java Mon Mar  3 10:47:38 2008
@@ -0,0 +1,39 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.axis2.jaxws.client;
+
+import org.apache.axis2.jaxws.core.controller.InvocationController;
+import org.apache.axis2.jaxws.core.controller.InvocationControllerFactory;
+
+public class TestClientInvocationControllerFactory implements InvocationControllerFactory {
+    
+    private InvocationController ic;
+    
+    public InvocationController getInvocationController() {
+        if (ic != null)
+            return ic;
+        else 
+            return new TestClientInvocationController();
+    }
+    
+    public void setInvocationController(InvocationController inst) {
+        ic = inst;
+    }
+
+}

Added: webservices/axis2/trunk/java/modules/jaxws-integration/test/org/apache/axis2/jaxws/client/dispatch/DispatchMTOMFeatureTest.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/jaxws-integration/test/org/apache/axis2/jaxws/client/dispatch/DispatchMTOMFeatureTest.java?rev=633234&view=auto
==============================================================================
--- webservices/axis2/trunk/java/modules/jaxws-integration/test/org/apache/axis2/jaxws/client/dispatch/DispatchMTOMFeatureTest.java (added)
+++ webservices/axis2/trunk/java/modules/jaxws-integration/test/org/apache/axis2/jaxws/client/dispatch/DispatchMTOMFeatureTest.java Mon Mar  3 10:47:38 2008
@@ -0,0 +1,185 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.axis2.jaxws.client.dispatch;
+
+import org.apache.axis2.jaxws.client.InterceptableClientTestCase;
+import org.apache.axis2.jaxws.client.TestClientInvocationController;
+import org.apache.axis2.jaxws.core.InvocationContext;
+import org.apache.axis2.jaxws.core.MessageContext;
+
+import javax.xml.namespace.QName;
+import javax.xml.transform.Source;
+import javax.xml.ws.Dispatch;
+import javax.xml.ws.Service;
+import javax.xml.ws.soap.MTOMFeature;
+import javax.xml.ws.soap.SOAPBinding;
+
+/**
+ * This suite of tests is for the MTOMFeature configuration that can
+ * be used on Dispatch clients.
+ */
+public class DispatchMTOMFeatureTest extends InterceptableClientTestCase {
+
+    /*
+     * Make sure MTOM is not enabled by default.
+     */
+    public void testNoMTOMFeature() {
+        Service svc = Service.create(new QName("http://test", "TestService"));
+        svc.addPort(new QName("http://test", "TestPort"), SOAPBinding.SOAP11HTTP_BINDING, "http://localhost");
+        Dispatch<Source> d = svc.createDispatch(new QName("http://test", "TestPort"), Source.class, Service.Mode.PAYLOAD);
+        
+        SOAPBinding sb = (SOAPBinding) d.getBinding();
+        assertTrue("SOAPBinding should not be null.", sb != null);
+        assertTrue("MTOM should not be enabled on the binding by default.", !sb.isMTOMEnabled());
+        
+        d.invoke(null);
+        
+        TestClientInvocationController testController = getInvocationController();
+        InvocationContext ic = testController.getInvocationContext();
+        MessageContext request = ic.getRequestMessageContext();
+        
+        assertTrue("Request should not be null.", request != null);
+        assertFalse("MTOM should not be enabled by default.", request.getMessage().isMTOMEnabled());
+    }
+    
+    /*
+     * Test the default configuration of the MTOMFeature.
+     */
+    public void testDefaultMTOMFeature() {
+        // Use the default feature config
+        MTOMFeature feature = new MTOMFeature();
+        
+        Service svc = Service.create(new QName("http://test", "TestService"));
+        svc.addPort(new QName("http://test", "TestPort"), SOAPBinding.SOAP11HTTP_BINDING, "http://localhost");
+        Dispatch<Source> d = svc.createDispatch(new QName("http://test", "TestPort"), 
+            Source.class, Service.Mode.PAYLOAD, feature);
+        
+        d.invoke(null);
+        
+        TestClientInvocationController testController = getInvocationController();
+        InvocationContext ic = testController.getInvocationContext();
+        MessageContext request = ic.getRequestMessageContext();
+        
+        assertTrue("MTOM should be enabled via the MTOMFeature.", request.getMessage().isMTOMEnabled());
+    }
+    
+    /*
+     * Test disabling the MTOM feature.
+     */
+    public void testDisabledMTOMFeature() {
+        Service svc = Service.create(new QName("http://test", "TestService"));
+        svc.addPort(new QName("http://test", "TestPort"), SOAPBinding.SOAP11HTTP_BINDING, "http://localhost");
+        
+        // Set the feature to be disabled.
+        MTOMFeature feature = new MTOMFeature(false);
+                
+        Dispatch<Source> d = svc.createDispatch(new QName("http://test", "TestPort"), 
+            Source.class, Service.Mode.PAYLOAD, feature);
+        
+        d.invoke(null);
+        
+        TestClientInvocationController testController = getInvocationController();
+        
+        InvocationContext ic = testController.getInvocationContext();
+        MessageContext request = ic.getRequestMessageContext();
+        
+        assertFalse("MTOM should be disabled via the MTOMFeature.", request.getMessage().isMTOMEnabled());
+    }
+    
+    /*
+     * Test the configuration of the threshold for MTOM when no attachment is 
+     * specified.  In this case, although enabled per the MTOMFeature, MTOM should
+     * not be enabled on the Message, since the attachment size is too small.
+     */
+    public void testMTOMFeatureThresholdWithNoAttachment() {
+        Service svc = Service.create(new QName("http://test", "TestService"));
+        svc.addPort(new QName("http://test", "TestPort"), SOAPBinding.SOAP11HTTP_BINDING, "http://localhost");
+        
+        // Set the feature to be disabled.
+        int threshold = 20000;
+        MTOMFeature feature = new MTOMFeature(threshold);
+                
+        Dispatch<Source> d = svc.createDispatch(new QName("http://test", "TestPort"), 
+            Source.class, Service.Mode.PAYLOAD, feature);
+        
+        d.invoke(null);
+        
+        TestClientInvocationController testController = getInvocationController();
+        
+        InvocationContext ic = testController.getInvocationContext();
+        MessageContext request = ic.getRequestMessageContext();
+        
+        assertFalse("MTOM should not be enabled.  The threshold was not exceeded.", request.getMessage().isMTOMEnabled());
+    }
+    
+    /*
+     * Test the configuration of the threshold for MTOM when an attachment is specified.
+     * In this case, MTOM should be enabled on the Message if the attachment specified is
+     * larger than the threshold.
+     */
+    public void testMTOMFeatureThresholdWithAttachment() {
+        
+    }
+    
+    /*
+     * Test the co-existence of an MTOMFeature and a MTOM binding type for a client.
+     */
+    public void testMTOMFeatureAndBinding() {
+        Service svc = Service.create(new QName("http://test", "TestService"));
+        svc.addPort(new QName("http://test", "TestPort"), SOAPBinding.SOAP11HTTP_MTOM_BINDING, "http://localhost");
+        
+        // Use the default feature config
+        MTOMFeature feature = new MTOMFeature();
+        
+        Dispatch<Source> d = svc.createDispatch(new QName("http://test", "TestPort"), 
+            Source.class, Service.Mode.PAYLOAD, feature);
+        
+        d.invoke(null);
+        
+        TestClientInvocationController testController = getInvocationController();
+        
+        InvocationContext ic = testController.getInvocationContext();
+        MessageContext request = ic.getRequestMessageContext();
+        
+        assertTrue("MTOM should be enabled via the MTOMFeature.", request.getMessage().isMTOMEnabled());
+    }
+    
+    /*
+     * Test the override of an MTOM binding by disabling MTOM via the MTOMFeature.
+     */
+    public void testMTOMFeatureAndBindingOverride() {
+        Service svc = Service.create(new QName("http://test", "TestService"));
+        svc.addPort(new QName("http://test", "TestPort"), SOAPBinding.SOAP11HTTP_MTOM_BINDING, "http://localhost");
+        
+        // Use the default feature config
+        MTOMFeature feature = new MTOMFeature(false);
+        
+        Dispatch<Source> d = svc.createDispatch(new QName("http://test", "TestPort"), 
+            Source.class, Service.Mode.PAYLOAD, feature);
+        
+        d.invoke(null);
+        
+        TestClientInvocationController testController = getInvocationController();
+        
+        InvocationContext ic = testController.getInvocationContext();
+        MessageContext request = ic.getRequestMessageContext();
+        
+        assertFalse("MTOM should be disabled via the MTOMFeature.", request.getMessage().isMTOMEnabled());        
+    }
+}

Added: webservices/axis2/trunk/java/modules/jaxws-integration/test/org/apache/axis2/jaxws/client/dispatch/InvocationControllerTest.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/jaxws-integration/test/org/apache/axis2/jaxws/client/dispatch/InvocationControllerTest.java?rev=633234&view=auto
==============================================================================
--- webservices/axis2/trunk/java/modules/jaxws-integration/test/org/apache/axis2/jaxws/client/dispatch/InvocationControllerTest.java (added)
+++ webservices/axis2/trunk/java/modules/jaxws-integration/test/org/apache/axis2/jaxws/client/dispatch/InvocationControllerTest.java Mon Mar  3 10:47:38 2008
@@ -0,0 +1,78 @@
+package org.apache.axis2.jaxws.client.dispatch;
+
+import org.apache.axis2.jaxws.core.InvocationContext;
+import org.apache.axis2.jaxws.core.controller.InvocationController;
+import org.apache.axis2.jaxws.core.controller.InvocationControllerFactory;
+import org.apache.axis2.jaxws.core.controller.impl.AxisInvocationController;
+import org.apache.axis2.jaxws.core.controller.impl.InvocationControllerFactoryImpl;
+import org.apache.axis2.jaxws.registry.FactoryRegistry;
+
+import javax.xml.namespace.QName;
+import javax.xml.transform.Source;
+import javax.xml.ws.AsyncHandler;
+import javax.xml.ws.Dispatch;
+import javax.xml.ws.Response;
+import javax.xml.ws.Service;
+import javax.xml.ws.soap.SOAPBinding;
+
+import java.util.concurrent.Future;
+
+import junit.framework.TestCase;
+
+public class InvocationControllerTest extends TestCase {
+
+    private QName svcQname = new QName("http://test", "TestService");
+    private QName portQname = new QName("http://test", "TestPort");
+    
+    public void testDefaultInvocationController() {
+        Service svc = Service.create(svcQname);
+        svc.addPort(portQname, SOAPBinding.SOAP11HTTP_BINDING, "http://localhost");
+        Dispatch d = svc.createDispatch(portQname, Source.class, Service.Mode.PAYLOAD);
+        
+        BaseDispatch bd = (BaseDispatch) d;
+        
+        assertTrue("An InvocationController instance was not created", bd.ic != null);
+        assertTrue("The default InvocationController type was incorrect.", 
+            AxisInvocationController.class.isAssignableFrom(bd.ic.getClass()));
+    }
+    
+    public void testPluggableInvocationController() {
+        FactoryRegistry.setFactory(InvocationControllerFactory.class, new TestInvocationControllerFactory());
+        
+        Service svc = Service.create(svcQname);
+        svc.addPort(portQname, SOAPBinding.SOAP11HTTP_BINDING, "http://localhost");
+        Dispatch d = svc.createDispatch(portQname, Source.class, Service.Mode.PAYLOAD);
+        
+        BaseDispatch bd = (BaseDispatch) d;
+        
+        // Set it back to the default so we don't break other tests.
+        FactoryRegistry.setFactory(InvocationControllerFactory.class, new InvocationControllerFactoryImpl());
+        
+        assertTrue("An InvocationController instance was not created", bd.ic != null);
+        assertTrue("The default InvocationController type was incorrect.", 
+            TestInvocationController.class.isAssignableFrom(bd.ic.getClass()));
+    }
+}
+
+class TestInvocationControllerFactory implements InvocationControllerFactory {
+    public InvocationController getInvocationController() {
+        return new TestInvocationController(); 
+    }
+}
+
+class TestInvocationController implements InvocationController {
+
+    public InvocationContext invoke(InvocationContext ic) {
+        return null;
+    }
+
+    public Future<?> invokeAsync(InvocationContext ic, AsyncHandler asyncHandler) {
+        return null;
+    }
+
+    public Response invokeAsync(InvocationContext ic) {
+        return null;
+    }
+
+    public void invokeOneWay(InvocationContext ic) throws Exception {}    
+}

Added: webservices/axis2/trunk/java/modules/jaxws-integration/test/org/apache/axis2/jaxws/client/proxy/ProxyMTOMFeatureTest.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/jaxws-integration/test/org/apache/axis2/jaxws/client/proxy/ProxyMTOMFeatureTest.java?rev=633234&view=auto
==============================================================================
--- webservices/axis2/trunk/java/modules/jaxws-integration/test/org/apache/axis2/jaxws/client/proxy/ProxyMTOMFeatureTest.java (added)
+++ webservices/axis2/trunk/java/modules/jaxws-integration/test/org/apache/axis2/jaxws/client/proxy/ProxyMTOMFeatureTest.java Mon Mar  3 10:47:38 2008
@@ -0,0 +1,136 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.axis2.jaxws.client.proxy;
+
+import org.apache.axis2.jaxws.client.InterceptableClientTestCase;
+import org.apache.axis2.jaxws.client.TestClientInvocationController;
+import org.apache.axis2.jaxws.core.InvocationContext;
+import org.apache.axis2.jaxws.core.MessageContext;
+
+import javax.jws.WebService;
+import javax.xml.namespace.QName;
+import javax.xml.ws.Service;
+import javax.xml.ws.soap.MTOMFeature;
+
+/**
+ * This suite of tests is for the MTOMFeature configuration that can
+ * be used on Proxy clients.
+ */
+public class ProxyMTOMFeatureTest extends InterceptableClientTestCase {
+
+    /*
+     * Make sure MTOM is not enabled by default.
+     */
+    public void testNoMTOMFeature() {
+        Service svc = Service.create(new QName("http://test", "ProxyMTOMService"));
+        ProxyMTOMService proxy = svc.getPort(ProxyMTOMService.class);
+        assertTrue("Proxy instance was null", proxy != null);
+        
+        proxy.sendAttachment("12345");
+        
+        TestClientInvocationController testController = getInvocationController();
+        InvocationContext ic = testController.getInvocationContext();
+        MessageContext request = ic.getRequestMessageContext();
+        
+        assertTrue("Request should not be null.", request != null);
+        assertTrue("MTOM should not be abled on the Message by default.", !request.getMessage().isMTOMEnabled());
+    }
+    
+    /*
+     * Test the default configuration of the MTOMFeature.
+     */
+    public void testDefaultMTOMFeature() {
+        // Use the default feature config
+        MTOMFeature feature = new MTOMFeature();
+        
+        Service svc = Service.create(new QName("http://test", "ProxyMTOMService"));
+        ProxyMTOMService proxy = svc.getPort(ProxyMTOMService.class, feature);
+        assertTrue("Proxy instance was null", proxy != null);
+        
+        proxy.sendAttachment("12345");
+        
+        TestClientInvocationController testController = getInvocationController();
+        InvocationContext ic = testController.getInvocationContext();
+        MessageContext request = ic.getRequestMessageContext();
+        
+        assertTrue("Request should not be null.", request != null);
+        assertTrue("MTOM should be abled on the Message by default.", request.getMessage().isMTOMEnabled());
+    }
+    
+    /*
+     * Test disabling the MTOM feature.
+     */
+    public void testDisabledMTOMFeature() {
+        // Use the default feature config
+        MTOMFeature feature = new MTOMFeature(false);
+        
+        Service svc = Service.create(new QName("http://test", "ProxyMTOMService"));
+        ProxyMTOMService proxy = svc.getPort(ProxyMTOMService.class, feature);
+        assertTrue("Proxy instance was null", proxy != null);
+        
+        proxy.sendAttachment("12345");
+        
+        TestClientInvocationController testController = getInvocationController();
+        InvocationContext ic = testController.getInvocationContext();
+        MessageContext request = ic.getRequestMessageContext();
+        
+        assertTrue("Request should not be null.", request != null);
+        assertTrue("MTOM should NOT be abled on the Message by default.", !request.getMessage().isMTOMEnabled());
+    }
+    
+    /*
+     * Test the configuration of the threshold for MTOM when no attachment is 
+     * specified.  In this case, although enabled per the MTOMFeature, MTOM should
+     * not be enabled on the Message, since the attachment size is too small.
+     */
+    public void testMTOMFeatureThreshold() {
+        // Set a threshold that we will not meet.
+        int threshold = 20000;
+        MTOMFeature feature = new MTOMFeature(threshold);
+        
+        Service svc = Service.create(new QName("http://test", "ProxyMTOMService"));
+        ProxyMTOMService proxy = svc.getPort(ProxyMTOMService.class, feature);
+        assertTrue("Proxy instance was null", proxy != null);
+        
+        proxy.sendAttachment("12345");
+        
+        TestClientInvocationController testController = getInvocationController();
+        InvocationContext ic = testController.getInvocationContext();
+        MessageContext request = ic.getRequestMessageContext();
+        
+        assertTrue("Request should not be null.", request != null);
+        assertTrue("MTOM should NOT be abled on the Message, the threshold was not met.", !request.getMessage().isMTOMEnabled());
+    }
+    
+    /*
+     * Test the configuration of the threshold for MTOM when an attachment is specified.
+     * In this case, MTOM should be enabled on the Message if the attachment specified is
+     * larger than the threshold.
+     */
+    public void testMTOMFeatureThresholdWithAttachment() {
+        
+    }
+    
+    @WebService()
+    public interface ProxyMTOMService {
+    
+        public String sendAttachment(String id);
+        
+    }
+}

Added: webservices/axis2/trunk/java/modules/jaxws-integration/test/org/apache/axis2/jaxws/client/soapaction/BookStore.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/jaxws-integration/test/org/apache/axis2/jaxws/client/soapaction/BookStore.java?rev=633234&view=auto
==============================================================================
--- webservices/axis2/trunk/java/modules/jaxws-integration/test/org/apache/axis2/jaxws/client/soapaction/BookStore.java (added)
+++ webservices/axis2/trunk/java/modules/jaxws-integration/test/org/apache/axis2/jaxws/client/soapaction/BookStore.java Mon Mar  3 10:47:38 2008
@@ -0,0 +1,87 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.axis2.jaxws.client.soapaction;
+
+import javax.jws.WebMethod;
+import javax.jws.WebParam;
+import javax.jws.WebResult;
+import javax.jws.WebService;
+import javax.jws.soap.SOAPBinding;
+import javax.jws.soap.SOAPBinding.ParameterStyle;
+import javax.xml.ws.RequestWrapper;
+import javax.xml.ws.ResponseWrapper;
+
+@WebService(name = "BookStore", targetNamespace = "http://jaxws.axis2.apache.org/client/soapaction")
+public interface BookStore {
+
+    /**
+     * 
+     * @param item
+     * @return
+     *     returns float
+     */
+    @WebMethod
+    @WebResult(name = "price", targetNamespace = "http://jaxws.axis2.apache.org/client/soapaction")
+    @RequestWrapper(localName = "getPrice", targetNamespace = "http://jaxws.axis2.apache.org/client/soapaction", className = "org.apache.axis2.jaxws.client.soapaction.GetPriceType")
+    @ResponseWrapper(localName = "getPriceResponse", targetNamespace = "http://jaxws.axis2.apache.org/client/soapaction", className = "org.apache.axis2.jaxws.client.soapaction.GetPriceResponseType")
+    public float getPrice(
+        @WebParam(name = "item", targetNamespace = "http://jaxws.axis2.apache.org/client/soapaction")
+        String item);
+
+    /**
+     * 
+     * @param item
+     * @return
+     *     returns float
+     */
+    @WebMethod(action = "http://jaxws.axis2.apache.org/client/soapaction/getPrice")
+    @WebResult(name = "price", targetNamespace = "http://jaxws.axis2.apache.org/client/soapaction")
+    @RequestWrapper(localName = "getPriceWithAction", targetNamespace = "http://jaxws.axis2.apache.org/client/soapaction", className = "org.apache.axis2.jaxws.client.soapaction.GetPriceType")
+    @ResponseWrapper(localName = "getPriceWithActionResponse", targetNamespace = "http://jaxws.axis2.apache.org/client/soapaction", className = "org.apache.axis2.jaxws.client.soapaction.GetPriceResponseType")
+    public float getPriceWithAction(
+        @WebParam(name = "item", targetNamespace = "http://jaxws.axis2.apache.org/client/soapaction")
+        String item);
+
+    /**
+     * 
+     * @param item
+     * @return
+     *     returns int
+     */
+    @WebMethod
+    @WebResult(name = "inventory", targetNamespace = "http://jaxws.axis2.apache.org/client/soapaction", partName = "inventory")
+    @SOAPBinding(parameterStyle = ParameterStyle.BARE)
+    public int getInventory(
+        @WebParam(name = "item", targetNamespace = "http://jaxws.axis2.apache.org/client/soapaction", partName = "item")
+        String item);
+
+    /**
+     * 
+     * @param item
+     * @return
+     *     returns int
+     */
+    @WebMethod(action = "http://jaxws.axis2.apache.org/client/soapaction/getInventory")
+    @WebResult(name = "inventoryWithAction", targetNamespace = "http://jaxws.axis2.apache.org/client/soapaction", partName = "inventory")
+    @SOAPBinding(parameterStyle = ParameterStyle.BARE)
+    public int getInventoryWithAction(
+        @WebParam(name = "itemWithAction", targetNamespace = "http://jaxws.axis2.apache.org/client/soapaction", partName = "item")
+        String item);
+
+}

Added: webservices/axis2/trunk/java/modules/jaxws-integration/test/org/apache/axis2/jaxws/client/soapaction/BookStoreService.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/jaxws-integration/test/org/apache/axis2/jaxws/client/soapaction/BookStoreService.java?rev=633234&view=auto
==============================================================================
--- webservices/axis2/trunk/java/modules/jaxws-integration/test/org/apache/axis2/jaxws/client/soapaction/BookStoreService.java (added)
+++ webservices/axis2/trunk/java/modules/jaxws-integration/test/org/apache/axis2/jaxws/client/soapaction/BookStoreService.java Mon Mar  3 10:47:38 2008
@@ -0,0 +1,72 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.axis2.jaxws.client.soapaction;
+
+import java.io.File;
+import java.net.MalformedURLException;
+import java.net.URL;
+
+import javax.xml.namespace.QName;
+import javax.xml.ws.Service;
+import javax.xml.ws.WebEndpoint;
+import javax.xml.ws.WebServiceClient;
+
+@WebServiceClient(name = "BookStoreService", targetNamespace = "http://jaxws.axis2.apache.org/client/soapaction", wsdlLocation = "SOAPActionTest.wsdl")
+public class BookStoreService
+    extends Service
+{
+
+    private static URL BOOKSTORESERVICE_WSDL_LOCATION;
+    private static String wsdlLocation="/target/test-classes/services/BookStoreService/META-INF/SOAPActionTest.wsdl";
+    static {
+        URL url = null;
+        try {
+            try{
+                String baseDir = new File(System.getProperty("basedir",".")).getCanonicalPath();
+                wsdlLocation = new File(baseDir + wsdlLocation).getAbsolutePath();
+            }catch(Exception e){
+                e.printStackTrace();
+            }
+            File file = new File(wsdlLocation);
+            url = file.toURL();
+        } catch (MalformedURLException e) {
+            e.printStackTrace();
+        }
+        BOOKSTORESERVICE_WSDL_LOCATION = url;
+    }
+    
+    public BookStoreService(URL wsdlLocation, QName serviceName) {
+        super(wsdlLocation, serviceName);
+    }
+
+    public BookStoreService() {
+        super(BOOKSTORESERVICE_WSDL_LOCATION, new QName("http://jaxws.axis2.apache.org/client/soapaction", "BookStoreService"));
+    }
+
+    /**
+     * 
+     * @return
+     *     returns BookStore
+     */
+    @WebEndpoint(name = "BookStorePort")
+    public BookStore getBookStorePort() {
+        return (BookStore)super.getPort(new QName("http://jaxws.axis2.apache.org/client/soapaction", "BookStorePort"), BookStore.class);
+    }
+
+}

Added: webservices/axis2/trunk/java/modules/jaxws-integration/test/org/apache/axis2/jaxws/client/soapaction/server/SOAPActionTestsMessageReceiver.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/jaxws-integration/test/org/apache/axis2/jaxws/client/soapaction/server/SOAPActionTestsMessageReceiver.java?rev=633234&view=auto
==============================================================================
--- webservices/axis2/trunk/java/modules/jaxws-integration/test/org/apache/axis2/jaxws/client/soapaction/server/SOAPActionTestsMessageReceiver.java (added)
+++ webservices/axis2/trunk/java/modules/jaxws-integration/test/org/apache/axis2/jaxws/client/soapaction/server/SOAPActionTestsMessageReceiver.java Mon Mar  3 10:47:38 2008
@@ -0,0 +1,159 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.axis2.jaxws.client.soapaction.server;
+
+import java.util.Iterator;
+
+import javax.xml.namespace.QName;
+
+import org.apache.axiom.om.OMAbstractFactory;
+import org.apache.axiom.om.OMElement;
+import org.apache.axiom.om.OMText;
+import org.apache.axiom.soap.SOAPEnvelope;
+import org.apache.axiom.soap.SOAPFactory;
+import org.apache.axis2.AxisFault;
+import org.apache.axis2.jaxws.TestLogger;
+import org.apache.axis2.context.MessageContext;
+import org.apache.axis2.description.AxisOperation;
+import org.apache.axis2.engine.AxisEngine;
+import org.apache.axis2.engine.MessageReceiver;
+import org.apache.axis2.util.MessageContextBuilder;
+
+/**
+ * This MessageReceiver is used for a series of tests relating to the
+ * SOAP action.  This is mostly for testing that the correct operation
+ * was resolved based on the SOAP action that was sent by the client.  
+ */
+public class SOAPActionTestsMessageReceiver implements MessageReceiver {
+    
+    public void receive(MessageContext request) throws AxisFault {
+        TestLogger.logger.debug("[server] SOAPActionTestsMessageReceiver: new request received");
+        
+        SOAPEnvelope env = request.getEnvelope();
+        TestLogger.logger.debug("[server] request message [" + env + "]");
+        
+        // Get the first child element
+        Iterator itr = env.getBody().getChildElements();
+        OMElement child = (OMElement) itr.next();
+
+        // Create the envelope for the response
+        SOAPFactory sf = OMAbstractFactory.getSOAP11Factory();
+        SOAPEnvelope responseEnv = sf.createSOAPEnvelope();
+        sf.createSOAPBody(responseEnv);
+        OMElement responseBodyContent = null;
+        
+        // Check to see which operation was invoked and then validate the contents 
+        // of the request (resolved AxisOperation and the soap action) to see if they are correct.
+        String name = child.getLocalName();
+        if (name.equals("getPrice")) {
+            float status = 0;
+            if (checkOperation("getPrice", request) &&
+                checkSOAPAction("", request)) {
+                TestLogger.logger.debug("[server] all checks passed");
+                status = 1;
+            }
+            else {
+                TestLogger.logger.debug("[server] some checks failed");
+            }
+            
+            responseBodyContent = sf.createOMElement(new QName("http://jaxws.axis2.apache.org/client/soapaction", "getPriceWithActionResponse"), responseEnv.getBody());
+            OMElement elem = sf.createOMElement(new QName("", "price"), responseBodyContent);
+            OMText text = sf.createOMText(Float.toString(status));
+            elem.addChild(text);
+        }
+        else if (name.equals("getPriceWithAction")) {
+            float status = 0;
+            if (checkOperation("getPriceWithAction", request) &&
+                checkSOAPAction("http://jaxws.axis2.apache.org/client/soapaction/getPrice", request)) {
+                TestLogger.logger.debug("[server] all checks passed");
+                status = 1;
+            }
+            else {
+                TestLogger.logger.debug("[server] some checks failed");
+            }
+            
+            responseBodyContent = sf.createOMElement(new QName("http://jaxws.axis2.apache.org/client/soapaction", "getPriceWithActionResponse"), responseEnv.getBody());
+            OMElement elem = sf.createOMElement(new QName("", "price"), responseBodyContent);
+            OMText text = sf.createOMText(Float.toString(status));
+            elem.addChild(text);
+        }
+        
+        /*
+        else if (name.equals("item")) {
+            if (checkOperation("getInventory", request) &&
+                checkSOAPAction("", request)) {
+                status = STATUS_PASS;
+            }
+        }
+        else if (name.equals("itemWithAction")) {
+            if (checkOperation("getInventoryWithAction", request) &&
+                checkSOAPAction("http://jaxws.axis2.apache.org/client/soapaction/getInventory", request)) {
+                status = STATUS_PASS;
+            }
+        }
+        */
+        
+        // Fill in the contents of the response and send it back
+        MessageContext response = MessageContextBuilder.createOutMessageContext(request);
+        responseEnv.getBody().addChild(responseBodyContent);
+        response.setEnvelope(responseEnv);
+
+        TestLogger.logger.debug("[server] response message [" + responseEnv.toString() + "]");
+        
+        response.getOperationContext().addMessageContext(response);
+        AxisEngine engine = new AxisEngine(response.getConfigurationContext());
+        engine.send(response);    
+    }
+    
+    /*
+     * Verify that the AxisOperation on the MessageContext is the 
+     * one that we were expecting based on the request.
+     */
+    private boolean checkOperation(String expectedOperationName, MessageContext mc) {
+        AxisOperation op = mc.getAxisOperation();
+        TestLogger.logger.debug("[server] checking expected operation [" + expectedOperationName +
+                "] against resolved operation [" + op.getName() + "]");
+        if (op.getName().getLocalPart().equals(expectedOperationName)) {
+            TestLogger.logger.debug("[server] operation name is correct");
+            return true;
+        }
+        else {
+            TestLogger.logger.debug("[server] operation name is incorrect");
+            return false;
+        }
+    }
+    
+    /*
+     * Verify that the SOAPAction present on the MessageContext is
+     * the one that we were expecting based on the request.
+     */
+    private boolean checkSOAPAction(String expectedAction, MessageContext mc) {
+       String action = mc.getSoapAction();
+        TestLogger.logger.debug("[server] checking expected action [" + expectedAction +
+                "] against received action [" + action + "]");
+       if (action != null && action.equals(expectedAction)) {
+           TestLogger.logger.debug("[server] soap action is correct");
+           return true;
+       }           
+       else {
+           TestLogger.logger.debug("[server] soap action is incorrect");
+           return false;
+       }   
+    }
+}

Added: webservices/axis2/trunk/java/modules/jaxws-integration/test/org/apache/axis2/jaxws/core/MessageContextTests.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/jaxws-integration/test/org/apache/axis2/jaxws/core/MessageContextTests.java?rev=633234&view=auto
==============================================================================
--- webservices/axis2/trunk/java/modules/jaxws-integration/test/org/apache/axis2/jaxws/core/MessageContextTests.java (added)
+++ webservices/axis2/trunk/java/modules/jaxws-integration/test/org/apache/axis2/jaxws/core/MessageContextTests.java Mon Mar  3 10:47:38 2008
@@ -0,0 +1,60 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.axis2.jaxws.core;
+
+import java.util.Map;
+
+import junit.framework.TestCase;
+
+/*
+ * Testing jaxws message context's interation with axis2 message context.
+ * JAXWS delegates all property setting/getting up to axis2, but we need to 
+ * be careful how we use axis2's MC.  We should not have access to the options
+ * bag in the axis2 MC, for example.
+ */
+
+public class MessageContextTests extends TestCase {
+
+    static final String key1 = "ONaxisMC";
+    static final String key2 = "ONaxisMCOptions";
+    static final String key3 = "ONjaxwsMC";
+    
+    /* TODO:
+     * should also test to make sure service or operation context properties
+     * on the axis2 MC are not accessible.  That's probably best left for another test.
+     */
+    public void testMessageContextPropertiesAccessibility() throws Exception {
+        org.apache.axis2.context.MessageContext axisMC = new org.apache.axis2.context.MessageContext();
+        MessageContext jaxwsMC = new MessageContext(axisMC);
+        axisMC.setProperty(key1, "value");
+        axisMC.getOptions().setProperty(key2, "value");
+        jaxwsMC.setProperty(key3, "value");
+        
+        assertNotNull(jaxwsMC.getProperty(key1));
+        assertNull(jaxwsMC.getProperty(key2));
+        assertNotNull(jaxwsMC.getProperty(key3));
+        
+        Map props = jaxwsMC.getProperties();
+        
+        assertNotNull(props.get(key1));
+        assertNull(props.get(key2));
+        assertNotNull(props.get(key3));
+    }
+    
+}

Added: webservices/axis2/trunk/java/modules/jaxws-integration/test/org/apache/axis2/jaxws/databinding/BindingToProtocolTests.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/jaxws-integration/test/org/apache/axis2/jaxws/databinding/BindingToProtocolTests.java?rev=633234&view=auto
==============================================================================
--- webservices/axis2/trunk/java/modules/jaxws-integration/test/org/apache/axis2/jaxws/databinding/BindingToProtocolTests.java (added)
+++ webservices/axis2/trunk/java/modules/jaxws-integration/test/org/apache/axis2/jaxws/databinding/BindingToProtocolTests.java Mon Mar  3 10:47:38 2008
@@ -0,0 +1,144 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.axis2.jaxws.databinding;
+
+import javax.xml.namespace.QName;
+
+import junit.framework.TestCase;
+
+/**
+ * A suite of tests for reading the binding from a WSDL file and
+ * making sure we are configuring the Protocol correctly for 
+ * messages based on that binding ID.
+ */
+public class BindingToProtocolTests extends TestCase {
+    
+    private static final String SOAP11_TEST_NS = "http://jaxws.axis2.apache.org/bindingtest/soap11";
+    private static final String SOAP12_TEST_NS = "http://jaxws.axis2.apache.org/bindingtest/soap12";
+    private static final QName SOAP11_SVC_QNAME = new QName(SOAP11_TEST_NS, "SOAP11EchoService");
+    private static final QName SOAP12_SVC_QNAME = new QName(SOAP12_TEST_NS, "SOAP12EchoService");
+    
+    public BindingToProtocolTests(String name) {
+        super(name);
+    }
+    
+    /**
+     * Test to see if we can read the SOAP 1.1 binding transport URL
+     * in a WSDL, as specified by JAX-WS section 10.4.1.
+     */
+    public void testReadJAXWSSOAP11Binding() throws Exception {
+        /*
+        // Get the WSDL with the JAX-WS binding url
+        URL wsdlUrl = new URL("file:./test-resources/wsdl/SOAP11Binding-JAXWS.wsdl");
+        
+        // TODO: There should be an easier way to do this without
+        // requring the creating of a Service object.  Should the
+        // ServiceDescription be constructed from just a WSDL file?
+        Service svc = Service.create(wsdlUrl, SOAP11_SVC_QNAME);
+        ServiceDelegate delegate = DescriptionTestUtils.getServiceDelegate(svc);
+        ServiceDescription sd = delegate.getServiceDescription();
+        
+        EndpointDescription[] eds = sd.getEndpointDescriptions();
+        for (int i = 0; i < eds.length; i++) {
+            System.out.println("port [" + eds[i].getTargetNamespace() + ":" + eds[i].getName() + "]");
+        }
+        
+        EndpointDescription ed = sd.getEndpointDescription(new QName(SOAP11_TEST_NS, "EchoPort"));
+        assertNotNull("The EndpointDescription was not created.", ed);
+        
+        String bindingID = ed.getClientBindingID();
+        assertNotNull("The binding ID was null.", bindingID);
+        
+        Protocol p = Protocol.getProtocolForBinding(bindingID);
+        assertTrue("Protocol configured incorrectly", p.equals(Protocol.soap11));
+        */
+    }
+    
+    /**
+     * Test to see if we can read the SOAP 1.1 binding transport URL
+     * in a WSDL, as specified by WS-I Basic Profile 1.1.
+     */
+    public void testReadWSISOAP11Binding() throws Exception {
+        /*
+        // Get the WSDL with the JAX-WS binding url
+        URL wsdlUrl = new URL("file:./test-resources/wsdl/SOAP11Binding-WSI.wsdl");
+        
+        // TODO: There should be an easier way to do this without
+        // requring the creating of a Service object.  Should the
+        // ServiceDescription be constructed from just a WSDL file?
+        Service svc = Service.create(wsdlUrl, SOAP11_SVC_QNAME);
+        ServiceDelegate delegate = DescriptionTestUtils.getServiceDelegate(svc);
+        ServiceDescription sd = delegate.getServiceDescription();
+        
+        EndpointDescription[] eds = sd.getEndpointDescriptions();
+        for (int i = 0; i < eds.length; i++) {
+            System.out.println("port [" + eds[i].getTargetNamespace() + ":" + eds[i].getName() + "]");
+        }
+        
+        EndpointDescription ed = sd.getEndpointDescription(new QName(SOAP11_TEST_NS, "EchoPort"));
+        assertNotNull("The EndpointDescription was not created.", ed);
+        
+        String bindingID = ed.getClientBindingID();
+        assertNotNull("The binding ID was null.", bindingID);
+        
+        Protocol p = Protocol.getProtocolForBinding(bindingID);
+        assertTrue("Protocol configured incorrectly", p.equals(Protocol.soap11));
+        */
+    }
+    
+    /**
+     * Test to see if we can read the SOAP 1.2 binding transport URL
+     * in a WSDL, as specified by JAX-WS.
+     */
+    public void testReadJAXWSSOAP12Binding() throws Exception {
+        /*
+        // Get the WSDL with the JAX-WS binding url
+        URL wsdlUrl = new URL("file:./test-resources/wsdl/SOAP12Binding-JAXWS.wsdl");
+        
+        // TODO: There should be an easier way to do this without
+        // requring the creating of a Service object.  Should the
+        // ServiceDescription be constructed from just a WSDL file?
+        Service svc = Service.create(wsdlUrl, SOAP12_SVC_QNAME);
+        ServiceDelegate delegate = DescriptionTestUtils.getServiceDelegate(svc);
+        ServiceDescription sd = delegate.getServiceDescription();
+        
+        EndpointDescription[] eds = sd.getEndpointDescriptions();
+        for (int i = 0; i < eds.length; i++) {
+            System.out.println("port [" + eds[i].getTargetNamespace() + ":" + eds[i].getName() + "]");
+        }
+        
+        EndpointDescription ed = sd.getEndpointDescription(new QName(SOAP12_TEST_NS, "EchoPort"));
+        assertNotNull("The EndpointDescription was not created.", ed);
+        
+        String bindingID = ed.getClientBindingID();
+        assertNotNull("The binding ID was null.", bindingID);
+        
+        Protocol p = Protocol.getProtocolForBinding(bindingID);
+        assertTrue("Protocol configured incorrectly", p.equals(Protocol.soap12));
+        */
+    }
+    
+    /**
+     * Test to see if we are defaulting the soap binding to SOAP 1.1
+     * correctly in the absence of a WSDL document.
+     */
+    public void testDefaultBindingNoWSDL() {
+        
+    }
+}



---------------------------------------------------------------------
To unsubscribe, e-mail: axis-cvs-unsubscribe@ws.apache.org
For additional commands, e-mail: axis-cvs-help@ws.apache.org