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/06/30 10:14:18 UTC

cvs commit: ws-jaxme/src/jaxme/org/apache/ws/jaxme/junit MarshallerTest.java

jochen      2005/06/30 01:14:18

  Modified:    src/jaxme/org/apache/ws/jaxme/impl Tag: v0_4
                        JMUnmarshallerHandlerImpl.java
               src/jaxme/org/apache/ws/jaxme/junit Tag: v0_4
                        MarshallerTest.java
  Log:
  An IllegalStateException was thrown in a case, where a proper validationEvent should have been fired.
  
  Revision  Changes    Path
  No                   revision
  No                   revision
  1.6.2.2   +27 -10    ws-jaxme/src/jaxme/org/apache/ws/jaxme/impl/JMUnmarshallerHandlerImpl.java
  
  Index: JMUnmarshallerHandlerImpl.java
  ===================================================================
  RCS file: /home/cvs/ws-jaxme/src/jaxme/org/apache/ws/jaxme/impl/JMUnmarshallerHandlerImpl.java,v
  retrieving revision 1.6.2.1
  retrieving revision 1.6.2.2
  diff -u -r1.6.2.1 -r1.6.2.2
  --- JMUnmarshallerHandlerImpl.java	18 Apr 2005 20:31:49 -0000	1.6.2.1
  +++ JMUnmarshallerHandlerImpl.java	30 Jun 2005 08:14:18 -0000	1.6.2.2
  @@ -224,24 +224,30 @@
   					break;
   				}
   			case STATE_COMPLEX_CONTENT:
  +	            JMSAXElementParser elementParser = (JMSAXElementParser) activeParser;
   				if (lvl != endLevel) {
  -					throw new IllegalStateException("Expected level " + endLevel
  -													+ ", got " + lvl);
  +					if (endLevel > lvl) {
  +						validationEvent(ValidationEvent.ERROR,
  +										"Premature endElement: " + new QName(pNamespaceURI, pLocalName),
  +										ValidationEvents.EVENT_PREMATURE_END_ELEMENT,
  +										null);
  +						while (endLevel > lvl) {
  +							terminateComplexType(pNamespaceURI, pLocalName, pQName, 
  +												 elementParser);
  +						}
  +					} else {
  +						throw new IllegalStateException("Expected level " + endLevel
  +														+ ", got " + lvl);
  +					}
   				}
  -	            JMSAXElementParser elementParser = (JMSAXElementParser) activeParser;
   				if (elementParser.isAtomic()) {
   					elementParser.endElement(pNamespaceURI, pLocalName, pQName, sb.toString());
   				}
   	            if (pNamespaceURI.equals(elementParser.getNamespaceURI())  &&
   	                pLocalName.equals(elementParser.getLocalName())) {
   	                if (activeParser.isFinished()) {
  -	                    if (removeActiveParser()) {
  -							activeParser.endElement(pNamespaceURI, pLocalName, pQName, elementParser.result);
  -	                    } else {
  -							if (observer != null) {
  -								observer.notify(result);
  -							}
  -	                    }
  +	                    terminateComplexType(pNamespaceURI, pLocalName, pQName,
  +	                    					 elementParser);
   	                    return;
   	                }
   	            }
  @@ -262,6 +268,17 @@
                           null);
       }
   
  +	private void terminateComplexType(String pNamespaceURI, String pLocalName, String pQName,
  +									  JMSAXElementParser elementParser) throws SAXException {
  +		if (removeActiveParser()) {
  +			activeParser.endElement(pNamespaceURI, pLocalName, pQName, elementParser.result);
  +		} else {
  +			if (observer != null) {
  +				observer.notify(result);
  +			}
  +		}
  +	}
  +
       private boolean isEmpty(char[] pChars, int pOffset, int pLen) {
           for (int i = 0;  i < pLen;  i++) {
               if (!Character.isWhitespace(pChars[pOffset+i])) {
  
  
  
  No                   revision
  No                   revision
  1.22.2.1  +43 -2     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.22
  retrieving revision 1.22.2.1
  diff -u -r1.22 -r1.22.2.1
  --- MarshallerTest.java	10 Mar 2005 10:14:04 -0000	1.22
  +++ MarshallerTest.java	30 Jun 2005 08:14:18 -0000	1.22.2.1
  @@ -31,7 +31,9 @@
   import javax.xml.bind.JAXBContext;
   import javax.xml.bind.JAXBException;
   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;
  @@ -43,6 +45,8 @@
   import org.apache.ws.jaxme.impl.DatatypeConverterImpl;
   import org.apache.ws.jaxme.impl.JAXBContextImpl;
   import org.apache.ws.jaxme.impl.JMMarshallerImpl;
  +import org.apache.ws.jaxme.test.misc.address.Address;
  +import org.apache.ws.jaxme.test.misc.address.AddressType;
   import org.apache.ws.jaxme.test.misc.types.AllElement;
   import org.apache.ws.jaxme.test.misc.types.AllSimpleTypes;
   import org.apache.ws.jaxme.test.misc.types.AllTypesElement;
  @@ -60,13 +64,15 @@
   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>
    * @version $Id$
    */
   public class MarshallerTest extends BaseTestCase {
  -  private JAXBContextImpl factory;
  +	private JAXBContextImpl factory;
   
     /** <p>Creates a new instance of MarshallerTest.</p>
      */
  @@ -578,4 +584,39 @@
       assertEquals(reh1.rootElementAttributes, reh2.rootElementAttributes);
       assertEquals(getContents(s), getContents(got));
     }
  +
  +
  +	/** Tests unmarshalling of an invalid string into a JaxMe object.
  +	 */
  +	public void testValidator() throws Exception {
  +		String invalidAddress = // Note the missing "Last"
  +			"<Address xmlns=\"http://ws.apache.org/jaxme/test/misc/address\">\n" +
  +			"  <Name>\n" +
  +			"    <First>Jane</First>\n" +
  +			"  </Name>\n" +
  +			"</Address>";
  +		InputSource isource = new InputSource(new StringReader(invalidAddress));
  +		isource.setSystemId("testValidator.xml");
  +		JAXBContext context = JAXBContext.newInstance("org.apache.ws.jaxme.test.misc.address");
  +		try {
  +			context.createUnmarshaller().unmarshal(isource);
  +			fail("No error reported.");
  +		} catch (UnmarshalException e) {
  +			// Ok
  +		} catch (Throwable t) {
  +			fail("Unexpected throwable " + t);
  +		}
  +
  +		org.apache.ws.jaxme.test.misc.address.ObjectFactory of = new org.apache.ws.jaxme.test.misc.address.ObjectFactory();
  +		Address address = of.createAddress();
  +		address.setName(of.createAddressTypeNameType());
  +		AddressType.NameType name = address.getName();
  +		name.setFirst("Jane");
  +		try {
  +			assertFalse(context.createValidator().validate(address));
  +		} catch (Throwable t) {
  +			t.printStackTrace();
  +			fail("Unexpected throwable " + t);
  +		}
  +	}
   }
  
  
  

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