[jboss-svn-commits] JBossWS SVN: r941 - in branches/jbossws-1.0/src: main/java/org/jboss/ws/jaxrpc main/java/org/jboss/ws/metadata test test/ant test/java/org/jboss/test/ws/jaxws test/java/org/jboss/test/ws/jaxws/jbws1123 test/resources/jaxws test/resources/jaxws/jbws1123 test/resources/jaxws/jbws1123/WEB-INF

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Mon Sep 11 14:17:57 EDT 2006


Author: darran.lofthouse at jboss.com
Date: 2006-09-11 14:17:49 -0400 (Mon, 11 Sep 2006)
New Revision: 941

Added:
   branches/jbossws-1.0/src/test/java/org/jboss/test/ws/jaxws/jbws1123/
   branches/jbossws-1.0/src/test/java/org/jboss/test/ws/jaxws/jbws1123/JBWS1123TestCase.java
   branches/jbossws-1.0/src/test/java/org/jboss/test/ws/jaxws/jbws1123/MessageBean.java
   branches/jbossws-1.0/src/test/resources/jaxws/jbws1123/
   branches/jbossws-1.0/src/test/resources/jaxws/jbws1123/WEB-INF/
   branches/jbossws-1.0/src/test/resources/jaxws/jbws1123/WEB-INF/web.xml
Modified:
   branches/jbossws-1.0/src/main/java/org/jboss/ws/jaxrpc/TypeMappingImpl.java
   branches/jbossws-1.0/src/main/java/org/jboss/ws/metadata/EndpointMetaData.java
   branches/jbossws-1.0/src/test/ant/build-jars-jaxws.xml
   branches/jbossws-1.0/src/test/build.xml
Log:
JBWS-1123 - Check all types registered instead of assuming each xml type has a single Java type.


Modified: branches/jbossws-1.0/src/main/java/org/jboss/ws/jaxrpc/TypeMappingImpl.java
===================================================================
--- branches/jbossws-1.0/src/main/java/org/jboss/ws/jaxrpc/TypeMappingImpl.java	2006-09-11 16:00:00 UTC (rev 940)
+++ branches/jbossws-1.0/src/main/java/org/jboss/ws/jaxrpc/TypeMappingImpl.java	2006-09-11 18:17:49 UTC (rev 941)
@@ -216,6 +216,22 @@
    }
 
    /**
+    * Get all of the Classes registered for this xmlType.
+    */
+   public List<Class> getJavaTypes(QName xmlType)
+   {
+      List<KeyPair> keyPairList = getKeyPairs(xmlType, null);
+      List<Class> classes = new ArrayList<Class>(keyPairList.size());
+      
+      for (KeyPair current : keyPairList)
+      {
+         classes.add(current.getJavaType());
+      }
+      
+      return classes;
+   }
+   
+   /**
     * Get the Class that was registered last for this xmlType
     * If there are two Java Types registered for the xmlType
     * return the primitive type rather than the wrapper,

Modified: branches/jbossws-1.0/src/main/java/org/jboss/ws/metadata/EndpointMetaData.java
===================================================================
--- branches/jbossws-1.0/src/main/java/org/jboss/ws/metadata/EndpointMetaData.java	2006-09-11 16:00:00 UTC (rev 940)
+++ branches/jbossws-1.0/src/main/java/org/jboss/ws/metadata/EndpointMetaData.java	2006-09-11 18:17:49 UTC (rev 941)
@@ -433,14 +433,24 @@
          String javaTypeName = tmMetaData.getJavaTypeName();
          QName xmlType = tmMetaData.getXmlType();
          if (xmlType != null)
-         {
-            Class registeredType = typeMapping.getJavaType(xmlType);
-            if (registeredType == null || registeredType.getName().equals(javaTypeName) == false)
+         {                       
+            List<Class> classes = typeMapping.getJavaTypes(xmlType);
+            
+            boolean registered = false;
+            for (Class current : classes) {
+               if (current.getName().equals(javaTypeName))
+               {
+                  registered = true;
+                  break;
+               }
+            }
+            
+            if (registered == false)
             {
                ClassLoader classLoader = service.getUnifiedMetaData().getClassLoader();
                if (classLoader == null)
                   throw new WSException("ClassLoader not available in meta data");
-
+               
                try
                {
                   Class javaType = JavaUtils.loadJavaType(javaTypeName, classLoader);

Modified: branches/jbossws-1.0/src/test/ant/build-jars-jaxws.xml
===================================================================
--- branches/jbossws-1.0/src/test/ant/build-jars-jaxws.xml	2006-09-11 16:00:00 UTC (rev 940)
+++ branches/jbossws-1.0/src/test/ant/build-jars-jaxws.xml	2006-09-11 18:17:49 UTC (rev 941)
@@ -68,6 +68,14 @@
       </metainf>
     </jar>
     
+    <!-- jaxws-jbws1123 -->
+    <war destfile="${build.test.dir}/libs/jaxws-jbws1123.war"
+         webxml="${build.test.dir}/resources/jaxws/jbws1123/WEB-INF/web.xml">      
+      <classes dir="${build.test.dir}/classes">
+        <include name="org/jboss/test/ws/jaxws/jbws1123/MessageBean.class"/>
+      </classes>
+    </war>    
+    
     <!-- jaxws-jsr181-complex -->
     <war warfile="${build.test.dir}/libs/jaxws-jsr181-complex.war" webxml="${build.test.dir}/resources/jaxws/jsr181/complex/WEB-INF/web.xml">
       <classes dir="${build.test.dir}/classes">

Modified: branches/jbossws-1.0/src/test/build.xml
===================================================================
--- branches/jbossws-1.0/src/test/build.xml	2006-09-11 16:00:00 UTC (rev 940)
+++ branches/jbossws-1.0/src/test/build.xml	2006-09-11 18:17:49 UTC (rev 941)
@@ -180,17 +180,18 @@
     <mkdir dir="${build.test.dir}/classes"/>
     <javac destdir="${build.test.dir}/classes" debug="${javac.debug}" verbose="${javac.verbose}" deprecation="${javac.deprecation}" failonerror="${javac.fail.onerror}">
       <src path="${test.java.dir}"/>
-      <exclude name="org/jboss/test/ws/addressing/**"/>
-      <!--exclude name="org/jboss/test/ws/benchmark/**"/-->
-      <exclude name="org/jboss/test/ws/interop/**"/>
-      <exclude name="org/jboss/test/ws/jsr181/**"/>
-      <exclude name="org/jboss/test/ws/jbws860/**"/>
-      <exclude name="org/jboss/test/ws/jbws871/**"/>
-      <exclude name="org/jboss/test/ws/jbws944/**"/>
-      <exclude name="org/jboss/test/ws/jbws947/**"/>
-      <exclude name="org/jboss/test/ws/samples/jsr181ejb/**"/>
-      <exclude name="org/jboss/test/ws/samples/jsr181pojo/**"/>
-      <exclude name="org/jboss/test/ws/samples/wsaddressing/**"/>
+      <!-- TODO - Remove dynamichandler once Java 5.0 code is removed -->
+      <exclude name="org/jboss/test/ws/jaxrpc/samples/dynamichandler/**"/>
+      <exclude name="org/jboss/test/ws/interop/**"/>      
+      <exclude name="org/jboss/test/ws/jaxws/jsr181/**"/>
+      <exclude name="org/jboss/test/ws/jaxws/jbws1123/**"/>
+      <exclude name="org/jboss/test/ws/jaxws/jbws860/**"/>
+      <exclude name="org/jboss/test/ws/jaxws/jbws871/**"/>
+      <exclude name="org/jboss/test/ws/jaxws/jbws944/**"/>
+      <exclude name="org/jboss/test/ws/jaxws/samples/jsr181ejb/**"/>
+      <exclude name="org/jboss/test/ws/jaxws/samples/jsr181pojo/**"/>
+      <exclude name="org/jboss/test/ws/jaxws/wsaddressing/**"/>
+      <exclude name="org/jboss/test/ws/jaxws/samples/wsaddressing/**"/>      
       <exclude name="org/jboss/test/ws/tools/jsr181/**"/>
       <classpath refid="javac.classpath"/>
     </javac>

Added: branches/jbossws-1.0/src/test/java/org/jboss/test/ws/jaxws/jbws1123/JBWS1123TestCase.java
===================================================================
--- branches/jbossws-1.0/src/test/java/org/jboss/test/ws/jaxws/jbws1123/JBWS1123TestCase.java	2006-09-11 16:00:00 UTC (rev 940)
+++ branches/jbossws-1.0/src/test/java/org/jboss/test/ws/jaxws/jbws1123/JBWS1123TestCase.java	2006-09-11 18:17:49 UTC (rev 941)
@@ -0,0 +1,124 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2005, JBoss Inc., and individual contributors as indicated
+ * by the @authors tag. See the copyright.txt in the distribution for a
+ * full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.jboss.test.ws.jaxws.jbws1123;
+
+import java.io.ByteArrayInputStream;
+import java.net.URL;
+
+import javax.xml.namespace.QName;
+import javax.xml.parsers.DocumentBuilder;
+import javax.xml.parsers.DocumentBuilderFactory;
+import javax.xml.parsers.ParserConfigurationException;
+import javax.xml.soap.MessageFactory;
+import javax.xml.soap.SOAPBody;
+import javax.xml.soap.SOAPConnection;
+import javax.xml.soap.SOAPConnectionFactory;
+import javax.xml.soap.SOAPElement;
+import javax.xml.soap.SOAPMessage;
+
+import junit.framework.Test;
+
+import org.jboss.test.ws.JBossWSTest;
+import org.jboss.test.ws.JBossWSTestSetup;
+import org.jboss.util.xml.DOMUtils;
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+
+/**
+ * 
+ * @author darran.lofthouse at jboss.com
+ * @since 31-August-2006
+ */
+public class JBWS1123TestCase extends JBossWSTest
+{
+
+   private final String TARGET_ENDPOINT = "http://" + getServerHost() + ":8080/jaxws-jbws1123/MessageService";
+
+   public static Test suite() throws Exception
+   {
+      return JBossWSTestSetup.newTestSetup(JBWS1123TestCase.class, "jaxws-jbws1123.war");
+   }
+
+   public void testProcessElement() throws Exception
+   {
+      performTest("processElement");
+   }
+
+   public void testProcessSOAPElement() throws Exception
+   {
+      performTest("processSOAPElement");
+   }
+
+   private void performTest(final String methodName) throws Exception
+   {
+      MessageFactory mf = MessageFactory.newInstance();
+      SOAPMessage reqMsg = mf.createMessage();
+
+      String request = MessageBean.request.replace("METHOD_NAME", methodName);
+
+      DocumentBuilder builder = getDocumentBuilder();
+      Document doc = builder.parse(new ByteArrayInputStream(request.getBytes()));
+      reqMsg.getSOAPBody().addDocument(doc);
+
+      SOAPConnectionFactory conFactory = SOAPConnectionFactory.newInstance();
+      SOAPConnection con = conFactory.createConnection();
+      SOAPMessage resMsg = con.call(reqMsg, new URL(TARGET_ENDPOINT));
+
+      SOAPBody soapBody = resMsg.getSOAPBody();
+      SOAPElement soapElement = (SOAPElement)soapBody.getChildElements().next();
+
+      validateResponse(methodName, soapElement);
+   }
+
+   private DocumentBuilder getDocumentBuilder() throws ParserConfigurationException
+   {
+      // Setup document builder
+      DocumentBuilderFactory docBuilderFactory = DocumentBuilderFactory.newInstance();
+      docBuilderFactory.setNamespaceAware(true);
+
+      DocumentBuilder builder = docBuilderFactory.newDocumentBuilder();
+      return builder;
+   }
+
+   private void validateResponse(final String methodName, final Element resEl) throws Exception
+   {
+      QName expName = new QName(MessageBean.TARGET_NAMESPACE, methodName + "Response", MessageBean.PREFIX_1);
+      QName elementName = new QName(resEl.getNamespaceURI(), resEl.getLocalName(), resEl.getPrefix());
+      assertEquals(expName, elementName);
+
+      expName = new QName("POID");
+      Element poidEl = DOMUtils.getFirstChildElement(resEl, expName);
+      elementName = new QName(poidEl.getLocalName());
+      assertEquals(expName, elementName);
+
+      String elementValue = DOMUtils.getTextContent(poidEl);
+      assertEquals("12345", elementValue);
+
+      expName = new QName("Status");
+      Element statusEl = DOMUtils.getFirstChildElement(resEl, expName);
+      elementName = new QName(statusEl.getLocalName());
+      assertEquals(expName, elementName);
+
+      elementValue = DOMUtils.getTextContent(statusEl);
+      assertEquals("ok", elementValue);
+   }
+}


Property changes on: branches/jbossws-1.0/src/test/java/org/jboss/test/ws/jaxws/jbws1123/JBWS1123TestCase.java
___________________________________________________________________
Name: svn:keywords
   + Id Revision
Name: svn:eol-style
   + LF

Added: branches/jbossws-1.0/src/test/java/org/jboss/test/ws/jaxws/jbws1123/MessageBean.java
===================================================================
--- branches/jbossws-1.0/src/test/java/org/jboss/test/ws/jaxws/jbws1123/MessageBean.java	2006-09-11 16:00:00 UTC (rev 940)
+++ branches/jbossws-1.0/src/test/java/org/jboss/test/ws/jaxws/jbws1123/MessageBean.java	2006-09-11 18:17:49 UTC (rev 941)
@@ -0,0 +1,168 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2005, JBoss Inc., and individual contributors as indicated
+ * by the @authors tag. See the copyright.txt in the distribution for a
+ * full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.jboss.test.ws.jaxws.jbws1123;
+
+import java.io.ByteArrayInputStream;
+import java.io.StringWriter;
+import java.rmi.RemoteException;
+
+import javax.jws.WebMethod;
+import javax.jws.WebService;
+import javax.jws.soap.SOAPBinding;
+import javax.xml.namespace.QName;
+import javax.xml.parsers.DocumentBuilder;
+import javax.xml.parsers.DocumentBuilderFactory;
+import javax.xml.soap.SOAPElement;
+import javax.xml.soap.SOAPFactory;
+import javax.xml.transform.Transformer;
+import javax.xml.transform.TransformerFactory;
+import javax.xml.transform.dom.DOMResult;
+import javax.xml.transform.dom.DOMSource;
+
+import org.jboss.logging.Logger;
+import org.jboss.util.xml.DOMUtils;
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+import org.w3c.dom.NodeList;
+
+import com.ibm.wsdl.util.xml.DOM2Writer;
+
+/**
+ * 
+ * @author darran.lofthouse at jboss.com
+ * @since 31-August-2006
+ */
+ at WebService(targetNamespace = "http://org.jboss/test/ws/jbws1123")
+ at SOAPBinding(style = SOAPBinding.Style.DOCUMENT, parameterStyle = SOAPBinding.ParameterStyle.BARE)
+public class MessageBean
+{
+
+   private static final Logger log = Logger.getLogger(MessageBean.class);
+
+   static final String TARGET_NAMESPACE = "http://org.jboss/test/ws/jbws1123";
+
+   static final String PREFIX_1 = "ns1";
+
+   static final String NSURI_2 = "http://somens";
+   static final String PREFIX_2 = "ns2";
+
+   static final String request = "<ns1:METHOD_NAME xmlns:ns1='" + TARGET_NAMESPACE + "' xmlns:ns2='http://somens' attrval='somevalue'>"
+         + "  <ns2:Customer>Kermit</ns2:Customer>" + "  <Item>Ferrari</Item>" + "</ns1:METHOD_NAME>";
+
+   static final String response = "<ns1:METHOD_NAME_RESPONSE xmlns:ns1='" + TARGET_NAMESPACE + "'>" + "  <POID>12345</POID>" + "  <Status>ok</Status>"
+         + "</ns1:METHOD_NAME_RESPONSE>";
+
+   @WebMethod
+   public Element processElement(final Element element) throws RemoteException
+   {
+      return commonProcessElement("processElement", element);
+   }
+
+   @WebMethod
+   public SOAPElement processSOAPElement(final SOAPElement element) throws RemoteException
+   {
+      return commonProcessElement("processSOAPElement", element);
+   }
+
+   private SOAPElement commonProcessElement(final String methodName, final Element msg) throws RemoteException
+   {
+      StringWriter swr = new StringWriter();
+      DOM2Writer.serializeAsXML(msg, swr);
+      log.info("processElement: " + swr);
+
+      try
+      {
+         Element reqEl = (Element)msg;
+
+         // verify order element
+         QName qname = new QName(TARGET_NAMESPACE, methodName, PREFIX_1);
+         QName elementName = new QName(reqEl.getNamespaceURI(), reqEl.getLocalName(), reqEl.getPrefix());
+         if (qname.equals(elementName) == false)
+            throw new IllegalArgumentException("Unexpected element: " + elementName);
+
+         // Verify the custom attribute
+         String attrVal = reqEl.getAttribute("attrval");
+         if ("somevalue".equals(attrVal) == false)
+            throw new IllegalArgumentException("Unexpected attribute value: " + attrVal);
+
+         // Verify NS declarations
+         String nsURI_1 = reqEl.getAttribute("xmlns:" + PREFIX_1);
+         if (TARGET_NAMESPACE.equals(nsURI_1) == false)
+            throw new IllegalArgumentException("Unexpected namespace URI: " + nsURI_1);
+
+         String nsURI_2 = reqEl.getAttribute("xmlns:" + PREFIX_2);
+         if (NSURI_2.equals(nsURI_2) == false)
+            throw new IllegalArgumentException("Unexpected namespace URI: " + nsURI_2);
+
+         // Test getElementsByTagNameNS
+         // http://jira.jboss.com/jira/browse/JBWS-99
+         NodeList nodeList1 = reqEl.getElementsByTagNameNS(NSURI_2, "Customer");
+         if (nodeList1.getLength() != 1)
+            throw new IllegalArgumentException("Cannot getElementsByTagNameNS");
+
+         // Test getElementsByTagName
+         // http://jira.jboss.com/jira/browse/JBWS-99
+         NodeList nodeList2 = reqEl.getElementsByTagName("Item");
+         if (nodeList2.getLength() != 1)
+            throw new IllegalArgumentException("Cannot getElementsByTagName");
+
+         // verify customer element
+         qname = new QName(NSURI_2, "Customer", PREFIX_2);
+         Element custEl = DOMUtils.getFirstChildElement(reqEl, qname);
+         String elementValue = DOMUtils.getTextContent(custEl);
+         if ("Customer".equals(custEl.getLocalName()) == false || "Kermit".equals(elementValue) == false)
+            throw new IllegalArgumentException("Unexpected element value: " + elementValue);
+
+         // verify item element
+         qname = new QName("Item");
+         Element itemEl = DOMUtils.getFirstChildElement(reqEl, qname);
+         elementValue = DOMUtils.getTextContent(itemEl);
+         if ("Item".equals(itemEl.getLocalName()) == false || "Ferrari".equals(elementValue) == false)
+            throw new IllegalArgumentException("Unexpected element value: " + elementValue);
+
+         // Setup document builder
+         DocumentBuilderFactory docBuilderFactory = DocumentBuilderFactory.newInstance();
+         docBuilderFactory.setNamespaceAware(true);
+
+         // Prepare response
+         DocumentBuilder builder = docBuilderFactory.newDocumentBuilder();
+
+         String response = MessageBean.response.replace("METHOD_NAME_RESPONSE", methodName + "Response");
+         Document doc = builder.parse(new ByteArrayInputStream(response.getBytes()));
+
+         SOAPElement parent = SOAPFactory.newInstance().createElement("dummy");
+         TransformerFactory factory = TransformerFactory.newInstance();
+         Transformer transformer = factory.newTransformer();
+         transformer.transform(new DOMSource(doc), new DOMResult(parent));
+         return (SOAPElement)parent.getChildElements().next();
+      }
+      catch (RuntimeException e)
+      {
+         throw e;
+      }
+      catch (Exception e)
+      {
+         throw new RemoteException(e.toString(), e);
+      }
+   }
+
+}


Property changes on: branches/jbossws-1.0/src/test/java/org/jboss/test/ws/jaxws/jbws1123/MessageBean.java
___________________________________________________________________
Name: svn:keywords
   + Id Revision
Name: svn:eol-style
   + LF

Added: branches/jbossws-1.0/src/test/resources/jaxws/jbws1123/WEB-INF/web.xml
===================================================================
--- branches/jbossws-1.0/src/test/resources/jaxws/jbws1123/WEB-INF/web.xml	2006-09-11 16:00:00 UTC (rev 940)
+++ branches/jbossws-1.0/src/test/resources/jaxws/jbws1123/WEB-INF/web.xml	2006-09-11 18:17:49 UTC (rev 941)
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<web-app xmlns="http://java.sun.com/xml/ns/j2ee"
+  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+  xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
+  version="2.4">
+
+  <servlet>
+    <servlet-name>MessageService</servlet-name>
+    <servlet-class>org.jboss.test.ws.jaxws.jbws1123.MessageBean</servlet-class>
+  </servlet>
+
+  <servlet-mapping>
+    <servlet-name>MessageService</servlet-name>
+    <url-pattern>/*</url-pattern>
+  </servlet-mapping>
+
+</web-app>
+


Property changes on: branches/jbossws-1.0/src/test/resources/jaxws/jbws1123/WEB-INF/web.xml
___________________________________________________________________
Name: svn:keywords
   + Id Revision
Name: svn:eol-style
   + LF




More information about the jboss-svn-commits mailing list