You are viewing a plain text version of this content. The canonical link for it is here.
Posted to jaxme-dev@ws.apache.org by jo...@apache.org on 2005/11/22 08:28:10 UTC

svn commit: r348115 - in /webservices/jaxme/branches/v0_4: ./ src/jaxme/org/apache/ws/jaxme/generator/types/ src/jaxme/org/apache/ws/jaxme/impl/ src/jaxme/org/apache/ws/jaxme/junit/ src/test/jaxb/jira/

Author: jochen
Date: Mon Nov 21 23:28:01 2005
New Revision: 348115

URL: http://svn.apache.org/viewcvs?rev=348115&view=rev
Log:
The namespace of a simple type xs:QName wasn't necessarily
declared by the marshaller.
PR: JAXME-72
Submitted-By: Andreas Arrgård, andreas.arrgard at octagroup.com


Added:
    webservices/jaxme/branches/v0_4/src/test/jaxb/jira/jaxme-72.xsd
Modified:
    webservices/jaxme/branches/v0_4/src/jaxme/org/apache/ws/jaxme/generator/types/QNameSG.java
    webservices/jaxme/branches/v0_4/src/jaxme/org/apache/ws/jaxme/impl/JMSAXDriverController.java
    webservices/jaxme/branches/v0_4/src/jaxme/org/apache/ws/jaxme/junit/JiraTest.java
    webservices/jaxme/branches/v0_4/status.xml

Modified: webservices/jaxme/branches/v0_4/src/jaxme/org/apache/ws/jaxme/generator/types/QNameSG.java
URL: http://svn.apache.org/viewcvs/webservices/jaxme/branches/v0_4/src/jaxme/org/apache/ws/jaxme/generator/types/QNameSG.java?rev=348115&r1=348114&r2=348115&view=diff
==============================================================================
--- webservices/jaxme/branches/v0_4/src/jaxme/org/apache/ws/jaxme/generator/types/QNameSG.java (original)
+++ webservices/jaxme/branches/v0_4/src/jaxme/org/apache/ws/jaxme/generator/types/QNameSG.java Mon Nov 21 23:28:01 2005
@@ -12,7 +12,6 @@
  * 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.ws.jaxme.generator.types;
 
@@ -37,50 +36,52 @@
  * @author <a href="mailto:joe@ispsoft.de">Jochen Wiedmann</a>
  */
 public class QNameSG extends AtomicTypeSGImpl {
-  public static final JavaQName QNAME_TYPE = JavaQNameImpl.getInstance(QName.class);
-
-  /** <p>Creates a new instance of QNameSG.</p>
-   */
-  public QNameSG(SGFactory pFactory, SchemaSG pSchema, XSType pType) throws SAXException {
-    super(pFactory, pSchema, pType);
-  }
-
-  protected String getDatatypeName() { return "QName"; }
-  protected JavaQName getDatatypeType() { return QNAME_TYPE; }
-
-  public JavaQName getRuntimeType(SimpleTypeSG pController) { return QNAME_TYPE; }
-
-  public TypedValue getCastFromString(SimpleTypeSG pController, String pValue) throws SAXException {
-    QName qName = QName.valueOf(pValue);
-	Object result;
-	if(qName.getNamespaceURI() == null  ||  qName.getNamespaceURI().length() == 0) {
-      result = new Object[]{ "new ", QNAME_TYPE, "(", JavaSource.getQuoted(qName.getLocalPart()), ")" };
-    } else {
-      result = new Object[]{ "new ", QNAME_TYPE, "(", JavaSource.getQuoted(qName.getNamespaceURI()),
-                            ", ", JavaSource.getQuoted(qName.getLocalPart()), ")" };
-    }
-	return new TypedValueImpl(result, QNAME_TYPE);
-  }
-
-  public TypedValue getCastFromString(SimpleTypeSG pController, JavaMethod pMethod, Object pValue, Object pData) throws SAXException {
-    return new TypedValueImpl(new Object[]{ pData, ".getDatatypeConverter().parseQName(", pValue, ", ", pData,
-                              ".getNamespaceSupport())" }, QNAME_TYPE);
-  }
-
-  public TypedValue getCastToString(SimpleTypeSG pController, Object pValue, DirectAccessible pData) {
-      return new TypedValueImpl(new Object[]{ pData, ".getDatatypeConverter().printQName(", pValue, ", ", pData,
-      							".getNamespaceContext())" }, String.class);
-  }
-  
-  public void forAllNonNullValues(SimpleTypeSG pController, JavaMethod pMethod, Object pValue, SGlet pSGlet) throws SAXException {
-    LocalJavaField f = pMethod.newJavaField(QNAME_TYPE);
-    f.addLine(pValue);
-    pMethod.addIf(f, " != null");
-    pSGlet.generate(pMethod, pValue);
-    pMethod.addEndIf();
-  }
-
-  public void forAllValues(SimpleTypeSG pController, JavaMethod pMethod, Object pValue, SGlet pSGlet) throws SAXException {
-    pSGlet.generate(pMethod, pValue);
-  }
+	/** The data type {@link QName}.
+	 */
+	public static final JavaQName QNAME_TYPE = JavaQNameImpl.getInstance(QName.class);
+	
+	/** <p>Creates a new instance of QNameSG.</p>
+	 */
+	public QNameSG(SGFactory pFactory, SchemaSG pSchema, XSType pType) throws SAXException {
+		super(pFactory, pSchema, pType);
+	}
+	
+	protected String getDatatypeName() { return "QName"; }
+	protected JavaQName getDatatypeType() { return QNAME_TYPE; }
+	
+	public JavaQName getRuntimeType(SimpleTypeSG pController) { return QNAME_TYPE; }
+	
+	public TypedValue getCastFromString(SimpleTypeSG pController, String pValue) throws SAXException {
+		QName qName = QName.valueOf(pValue);
+		Object result;
+		if(qName.getNamespaceURI() == null  ||  qName.getNamespaceURI().length() == 0) {
+			result = new Object[]{ "new ", QNAME_TYPE, "(", JavaSource.getQuoted(qName.getLocalPart()), ")" };
+		} else {
+			result = new Object[]{ "new ", QNAME_TYPE, "(", JavaSource.getQuoted(qName.getNamespaceURI()),
+					", ", JavaSource.getQuoted(qName.getLocalPart()), ")" };
+		}
+		return new TypedValueImpl(result, QNAME_TYPE);
+	}
+	
+	public TypedValue getCastFromString(SimpleTypeSG pController, JavaMethod pMethod, Object pValue, Object pData) throws SAXException {
+		return new TypedValueImpl(new Object[]{ pData, ".getDatatypeConverter().parseQName(", pValue, ", ", pData,
+		".getNamespaceSupport())" }, QNAME_TYPE);
+	}
+	
+	public TypedValue getCastToString(SimpleTypeSG pController, Object pValue, DirectAccessible pData) {
+		return new TypedValueImpl(new Object[]{ pData, ".getElementQName(this, ", pValue, ".getNamespaceURI(), ", pValue,
+		".getLocalPart())" }, String.class);
+	}
+	
+	public void forAllNonNullValues(SimpleTypeSG pController, JavaMethod pMethod, Object pValue, SGlet pSGlet) throws SAXException {
+		LocalJavaField f = pMethod.newJavaField(QNAME_TYPE);
+		f.addLine(pValue);
+		pMethod.addIf(f, " != null");
+		pSGlet.generate(pMethod, pValue);
+		pMethod.addEndIf();
+	}
+	
+	public void forAllValues(SimpleTypeSG pController, JavaMethod pMethod, Object pValue, SGlet pSGlet) throws SAXException {
+		pSGlet.generate(pMethod, pValue);
+	}
 }

Modified: webservices/jaxme/branches/v0_4/src/jaxme/org/apache/ws/jaxme/impl/JMSAXDriverController.java
URL: http://svn.apache.org/viewcvs/webservices/jaxme/branches/v0_4/src/jaxme/org/apache/ws/jaxme/impl/JMSAXDriverController.java?rev=348115&r1=348114&r2=348115&view=diff
==============================================================================
--- webservices/jaxme/branches/v0_4/src/jaxme/org/apache/ws/jaxme/impl/JMSAXDriverController.java (original)
+++ webservices/jaxme/branches/v0_4/src/jaxme/org/apache/ws/jaxme/impl/JMSAXDriverController.java Mon Nov 21 23:28:01 2005
@@ -16,6 +16,7 @@
 package org.apache.ws.jaxme.impl;
 
 import javax.xml.bind.DatatypeConverterInterface;
+import javax.xml.bind.PrintConversionEvent;
 import javax.xml.bind.ValidationEvent;
 import javax.xml.bind.ValidationEventHandler;
 import javax.xml.bind.ValidationEventLocator;
@@ -130,8 +131,12 @@
 		}
 	}
 
-	protected String getElementQName(JMSAXDriver pDriver, String pNamespaceURI,
-									 String pLocalName)
+	/** Returns the qualified name of the element <code>pLocalName</code>
+	 * in namespace <code>pNamespaceURI</code>. In other words, it attachs
+	 * a prefix, if required.
+	 */
+	public String getElementQName(JMSAXDriver pDriver, String pNamespaceURI,
+								  String pLocalName)
 			throws SAXException {
 		if (pNamespaceURI == null) {
 			pNamespaceURI = "";
@@ -260,6 +265,8 @@
 		}
 	}
 
+	/** Fires a {@link PrintConversionEvent}.
+	 */
 	public void printConversionEvent(Object pObject, String pMsg, Exception pException) throws SAXException {
 		ValidationEventHandler handler = getJMMarshaller().getEventHandler();
 		if (handler != null) {

Modified: webservices/jaxme/branches/v0_4/src/jaxme/org/apache/ws/jaxme/junit/JiraTest.java
URL: http://svn.apache.org/viewcvs/webservices/jaxme/branches/v0_4/src/jaxme/org/apache/ws/jaxme/junit/JiraTest.java?rev=348115&r1=348114&r2=348115&view=diff
==============================================================================
--- webservices/jaxme/branches/v0_4/src/jaxme/org/apache/ws/jaxme/junit/JiraTest.java (original)
+++ webservices/jaxme/branches/v0_4/src/jaxme/org/apache/ws/jaxme/junit/JiraTest.java Mon Nov 21 23:28:01 2005
@@ -8,6 +8,7 @@
 import javax.xml.bind.Unmarshaller;
 import javax.xml.bind.ValidationEvent;
 import javax.xml.bind.ValidationEventHandler;
+import javax.xml.namespace.QName;
 
 import magoffin.matt.ieat.domain.impl.IngredientImpl;
 import net.dspc.commons.activitymodel.TransmissionData;
@@ -21,6 +22,7 @@
 import org.apache.ws.jaxme.generator.sg.SchemaSG;
 import org.apache.ws.jaxme.generator.sg.impl.JAXBSchemaReader;
 import org.apache.ws.jaxme.generator.util.JavaNamer;
+import org.apache.ws.jaxme.test.jira72.Jaxme72;
 import org.apache.ws.jaxme.test.misc.types.Jira62;
 import org.apache.ws.jaxme.test.misc.types.Row;
 import org.apache.ws.jaxme.test.misc.types.impl.RowImpl;
@@ -229,5 +231,22 @@
 		} catch (SAXException e) {
 			assertTrue(e.getMessage().indexOf("Model groups with maxOccurs > 1 are not yet supported.") != -1);
 		}
+	}
+
+	/** Test for <a href="http://issues.apache.org/jira/browse/JAXME-72">JAXME-72</a>.
+	 */
+	public void testJAXME72() throws JAXBException {
+		// create test structure
+		org.apache.ws.jaxme.test.jira72.ObjectFactory oFact = new org.apache.ws.jaxme.test.jira72.ObjectFactory();
+		Jaxme72 jaxme72  = oFact.createJaxme72();
+		QName qName = new QName("http://this.namespace/must/be/declared", "jaxme72");
+		jaxme72.setTest(qName);
+		// try to marshal it...Jira issue 72 address the problem that this will fail.
+		JAXBContext ctx = JAXBContext.newInstance("org.apache.ws.jaxme.test.jira72");
+		StringWriter sw = new StringWriter();
+		ctx.createMarshaller().marshal(jaxme72, sw);
+		// if we get this far issue 72 shoulb be fixed. just to be sure - unmarshal and compare QNames.
+		Jaxme72 jaxme72Clone = (Jaxme72) ctx.createUnmarshaller().unmarshal(new InputSource(new StringReader(sw.toString())));
+		assertEquals(jaxme72.getTest(),jaxme72Clone.getTest());
 	}
 }

Added: webservices/jaxme/branches/v0_4/src/test/jaxb/jira/jaxme-72.xsd
URL: http://svn.apache.org/viewcvs/webservices/jaxme/branches/v0_4/src/test/jaxb/jira/jaxme-72.xsd?rev=348115&view=auto
==============================================================================
--- webservices/jaxme/branches/v0_4/src/test/jaxb/jira/jaxme-72.xsd (added)
+++ webservices/jaxme/branches/v0_4/src/test/jaxb/jira/jaxme-72.xsd Mon Nov 21 23:28:01 2005
@@ -0,0 +1,8 @@
+<xs:schema targetNamespace='http://apache.org/ws/jaxme/test/jira72'
+	    xmlns:xs='http://www.w3.org/2001/XMLSchema'>
+  <xs:element name='jaxme-72'>
+    <xs:complexType>
+      <xs:attribute name="test" type="xs:QName"/>
+    </xs:complexType>
+  </xs:element>
+</xs:schema>

Modified: webservices/jaxme/branches/v0_4/status.xml
URL: http://svn.apache.org/viewcvs/webservices/jaxme/branches/v0_4/status.xml?rev=348115&r1=348114&r2=348115&view=diff
==============================================================================
--- webservices/jaxme/branches/v0_4/status.xml (original)
+++ webservices/jaxme/branches/v0_4/status.xml Mon Nov 21 23:28:01 2005
@@ -80,6 +80,11 @@
         the referencing particles maxOccurs and minOccurs values haven't
         been inherited. (JAXME-63)
       </action>
+      <action dev="JW" type="fix" context="generator">
+        The namespace of a simple type xs:QName wasn't necessarily
+        declared by the marshaller. (JAXME-72, Andreas Arrgård,
+        andreas.arrgard at octagroup.com)
+      </action>
     </release>
     <release version="0.4" date="2005-May-19">
       <action dev="JW" type="fix" context="xs">



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