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/07/20 22:48:30 UTC
cvs commit: ws-jaxme/src/jaxme/org/apache/ws/jaxme/junit MarshallerTest.java
jochen 2005/07/20 13:48:30
Modified: src/jaxme/org/apache/ws/jaxme/generator/sg/impl/ccsg
GroupHandlerSG.java BeanGeneratingVisitor.java
SequenceHandlerSG.java
src/test/jaxb types.xsd
. status.xml
src/jaxme/org/apache/ws/jaxme/junit MarshallerTest.java
Log:
Added a unit test for mixed content handling. Fixed the handling of
complex child elements in mixed content types.
Revision Changes Path
1.8 +26 -2 ws-jaxme/src/jaxme/org/apache/ws/jaxme/generator/sg/impl/ccsg/GroupHandlerSG.java
Index: GroupHandlerSG.java
===================================================================
RCS file: /home/cvs/ws-jaxme/src/jaxme/org/apache/ws/jaxme/generator/sg/impl/ccsg/GroupHandlerSG.java,v
retrieving revision 1.7
retrieving revision 1.8
diff -u -r1.7 -r1.8
--- GroupHandlerSG.java 8 Jul 2005 20:43:57 -0000 1.7
+++ GroupHandlerSG.java 20 Jul 2005 20:48:29 -0000 1.8
@@ -164,8 +164,32 @@
}
}
- protected boolean isRequiredParticle(ParticleSG particleSG) {
- return particleSG.getMinOccurs() > 0;
+ protected boolean isRequiredParticle(ParticleSG particleSG) throws SAXException {
+ if (particleSG.getMinOccurs() == 0) {
+ return false;
+ } else {
+ if (particleSG.isGroup()) {
+ GroupSG group = particleSG.getGroupSG();
+ ParticleSG[] particles = group.getParticles();
+ if (group.isChoice()) {
+ for (int i = 0; i < particles.length; i++) {
+ if (!isRequiredParticle(particles[i])) {
+ return false;
+ }
+ }
+ return true;
+ } else {
+ for (int i = 0; i < particles.length; i++) {
+ if (isRequiredParticle(particles[i])) {
+ return true;
+ }
+ }
+ return false;
+ }
+ } else {
+ return true;
+ }
+ }
}
protected void handleStartOfChildElement(Object pUnmarshallerHandler,
1.5 +26 -24 ws-jaxme/src/jaxme/org/apache/ws/jaxme/generator/sg/impl/ccsg/BeanGeneratingVisitor.java
Index: BeanGeneratingVisitor.java
===================================================================
RCS file: /home/cvs/ws-jaxme/src/jaxme/org/apache/ws/jaxme/generator/sg/impl/ccsg/BeanGeneratingVisitor.java,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -r1.4 -r1.5
--- BeanGeneratingVisitor.java 13 Jul 2005 19:58:16 -0000 1.4
+++ BeanGeneratingVisitor.java 20 Jul 2005 20:48:29 -0000 1.5
@@ -128,32 +128,34 @@
final JavaSource pJs = this.js;
final PropertySG elementSG = pParticle.getPropertySG();
if (isMixed) {
- JavaQName qName = GroupUtil.getContentClass(pGroupSG, pParticle, pJs.getQName());
- JavaSource js;
- if (qName.isInnerClass()) {
- js = pJs.newJavaInnerClass(qName.getInnerClassName(), JavaSource.PUBLIC);
- if (!pJs.isInterface()) {
- js.setStatic(true);
+ if (!pParticle.getObjectSG().getTypeSG().isComplex()) {
+ JavaQName qName = GroupUtil.getContentClass(pGroupSG, pParticle, pJs.getQName());
+ JavaSource js;
+ if (qName.isInnerClass()) {
+ js = pJs.newJavaInnerClass(qName.getInnerClassName(), JavaSource.PUBLIC);
+ if (!pJs.isInterface()) {
+ js.setStatic(true);
+ }
+ } else {
+ js = pJs.getFactory().newJavaSource(qName, JavaSource.PUBLIC);
}
- } else {
- js = pJs.getFactory().newJavaSource(qName, JavaSource.PUBLIC);
- }
- if (pJs.isInterface()) {
- js.setType(JavaSource.INTERFACE);
- } else {
- js.addImplements(GroupUtil.getContentClass(pGroupSG, pParticle, ct.getClassContext().getXMLInterfaceName()));
- }
- PropertySGChain chain = ((PropertySGImpl) elementSG).getHeadOfChain();
- PropertySGChain head = new PropertySGChainImpl(chain){
- public String getXMLFieldName(PropertySG pController) throws SAXException {
- return "_value";
- }
- public String getPropertyName(PropertySG pController) throws SAXException {
- return "value";
+ if (pJs.isInterface()) {
+ js.setType(JavaSource.INTERFACE);
+ } else {
+ js.addImplements(GroupUtil.getContentClass(pGroupSG, pParticle, ct.getClassContext().getXMLInterfaceName()));
}
- };
- PropertySGImpl pSG = new PropertySGImpl(head);
- pSG.generate(js);
+ PropertySGChain chain = ((PropertySGImpl) elementSG).getHeadOfChain();
+ PropertySGChain head = new PropertySGChainImpl(chain){
+ public String getXMLFieldName(PropertySG pController) throws SAXException {
+ return "_value";
+ }
+ public String getPropertyName(PropertySG pController) throws SAXException {
+ return "value";
+ }
+ };
+ PropertySGImpl pSG = new PropertySGImpl(head);
+ pSG.generate(js);
+ }
} else {
elementSG.generate(pJs);
}
1.5 +1 -1 ws-jaxme/src/jaxme/org/apache/ws/jaxme/generator/sg/impl/ccsg/SequenceHandlerSG.java
Index: SequenceHandlerSG.java
===================================================================
RCS file: /home/cvs/ws-jaxme/src/jaxme/org/apache/ws/jaxme/generator/sg/impl/ccsg/SequenceHandlerSG.java,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -r1.4 -r1.5
--- SequenceHandlerSG.java 24 Apr 2005 20:16:48 -0000 1.4
+++ SequenceHandlerSG.java 20 Jul 2005 20:48:29 -0000 1.5
@@ -143,7 +143,7 @@
* returns the index of the last valid particle. Returns
* -1, if there is no valid particle.
*/
- private int getLastValidParticle(int pState) {
+ private int getLastValidParticle(int pState) throws SAXException {
int lastParticle;
if (pState == 0) {
lastParticle = 0;
1.13 +24 -0 ws-jaxme/src/test/jaxb/types.xsd
Index: types.xsd
===================================================================
RCS file: /home/cvs/ws-jaxme/src/test/jaxb/types.xsd,v
retrieving revision 1.12
retrieving revision 1.13
diff -u -r1.12 -r1.13
--- types.xsd 6 Jul 2005 21:34:14 -0000 1.12
+++ types.xsd 20 Jul 2005 20:48:30 -0000 1.13
@@ -275,4 +275,28 @@
</xs:sequence>
</xs:complexType>
</xs:element>
+
+ <xs:element name="html">
+ <xs:complexType mixed="true">
+ <xs:sequence>
+ <xs:element name="dummy" type="xs:string"/>
+ <xs:element name="head">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="title" type="xs:string"/>
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="body">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="p" maxOccurs="unbounded">
+ <xs:complexType/>
+ </xs:element>
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
</xs:schema>
1.65 +5 -0 ws-jaxme/status.xml
Index: status.xml
===================================================================
RCS file: /home/cvs/ws-jaxme/status.xml,v
retrieving revision 1.64
retrieving revision 1.65
diff -u -r1.64 -r1.65
--- status.xml 19 Jul 2005 21:01:59 -0000 1.64
+++ status.xml 20 Jul 2005 20:48:30 -0000 1.65
@@ -44,6 +44,11 @@
A sequence was always treated as a required group,
even if all particles were optional.
</action>
+ <action dev="JW" type="fix" content="generator">
+ Added a unit test for mixed content handling. Fixed
+ the handling of complex child elements in mixed
+ content types.
+ </action>
</release>
<release version="0.5beta" date="2005-Jul-13">
<action dev="JW" type="enhancement" context="generator">
1.24 +24 -4 ws-jaxme/src/jaxme/org/apache/ws/jaxme/junit/MarshallerTest.java
Index: MarshallerTest.java
===================================================================
RCS file: /home/cvs/ws-jaxme/src/jaxme/org/apache/ws/jaxme/junit/MarshallerTest.java,v
retrieving revision 1.23
retrieving revision 1.24
diff -u -r1.23 -r1.24
--- MarshallerTest.java 30 Jun 2005 08:16:14 -0000 1.23
+++ MarshallerTest.java 20 Jul 2005 20:48:30 -0000 1.24
@@ -33,7 +33,6 @@
import javax.xml.bind.Marshaller;
import javax.xml.bind.UnmarshalException;
import javax.xml.bind.Unmarshaller;
-import javax.xml.bind.ValidationException;
import javax.xml.namespace.QName;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.parsers.SAXParser;
@@ -51,6 +50,7 @@
import org.apache.ws.jaxme.test.misc.types.AllSimpleTypes;
import org.apache.ws.jaxme.test.misc.types.AllTypesElement;
import org.apache.ws.jaxme.test.misc.types.Author;
+import org.apache.ws.jaxme.test.misc.types.Html;
import org.apache.ws.jaxme.test.misc.types.ObjectFactory;
import org.apache.ws.jaxme.test.misc.types.impl.AllElementImpl;
import org.apache.ws.jaxme.test.misc.types.impl.AllSimpleTypesImpl;
@@ -64,8 +64,6 @@
import org.xml.sax.XMLReader;
import org.xml.sax.helpers.DefaultHandler;
-import sun.security.validator.ValidatorException;
-
/**
* @author <a href="mailto:joe@ispsoft.de">Jochen Wiedmann</a>
@@ -619,4 +617,26 @@
fail("Unexpected throwable " + t);
}
}
+
+ /** Tests marshalling and unmarshalling of a mixed content element.
+ */
+ public void testMixedContent() throws Exception {
+ final String html =
+ "<ex:html xmlns:ex=\"http://ws.apache.org/jaxme/test/misc/types\">\n" +
+ " xyz<ex:dummy>012</ex:dummy>\n" +
+ " <ex:head><ex:title>foo bar</ex:title></ex:head>\n" +
+ " <ex:body><ex:p/></ex:body>\n" +
+ "</ex:html>";
+ InputSource isource = new InputSource(new StringReader(html));
+ isource.setSystemId("mixedContent.xml");
+ JAXBContext ctx = getJAXBContext(Html.class);
+ Html htmlElem = (Html) ctx.createUnmarshaller().unmarshal(isource);
+ StringWriter sw = new StringWriter();
+ Marshaller m = ctx.createMarshaller();
+ m.setProperty(JMMarshallerImpl.JAXME_XML_DECLARATION, Boolean.FALSE);
+ m.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.FALSE);
+ m.marshal(htmlElem, sw);
+ String got = sw.toString();
+ assertEquals(html, got);
+ }
}
---------------------------------------------------------------------
To unsubscribe, e-mail: jaxme-dev-unsubscribe@ws.apache.org
For additional commands, e-mail: jaxme-dev-help@ws.apache.org