Index: org/apache/ws/jaxme/generator/sg/impl/ccsg/HandlerSGImpl.java =================================================================== RCS file: /home/cvspublic/ws-jaxme/src/jaxme/org/apache/ws/jaxme/generator/sg/impl/ccsg/HandlerSGImpl.java,v retrieving revision 1.4 diff -u -r1.4 HandlerSGImpl.java --- org/apache/ws/jaxme/generator/sg/impl/ccsg/HandlerSGImpl.java 30 Jul 2005 21:05:15 -0000 1.4 +++ org/apache/ws/jaxme/generator/sg/impl/ccsg/HandlerSGImpl.java 5 Aug 2005 06:52:10 -0000 @@ -36,6 +36,7 @@ import org.apache.ws.jaxme.js.LocalJavaField; import org.apache.ws.jaxme.js.TypedValue; import org.apache.ws.jaxme.js.impl.TypedValueImpl; +import org.apache.ws.jaxme.xs.xml.XsQName; import org.xml.sax.Attributes; import org.xml.sax.SAXException; @@ -141,6 +142,11 @@ createSimpleTypeConversion(jm, myAttributes[i].getTypeSG(), pValue, "@" + myAttributes[i].getName(), attr.getPropertySG(), result); + XsQName typeName = attr.getTypeSG().getName(); + if ("http://www.w3.org/2001/XMLSchema".equals(typeName.getNamespaceURI()) + && "ID".equals(typeName.getLocalName())) { + jm.addLine("getHandler().addId(", pValue, ", ", result, ");"); + } jm.addLine("return;"); } if (!firstInNamespace) { Index: org/apache/ws/jaxme/impl/JMUnmarshallerHandlerImpl.java =================================================================== RCS file: /home/cvspublic/ws-jaxme/src/jaxme/org/apache/ws/jaxme/impl/JMUnmarshallerHandlerImpl.java,v retrieving revision 1.9 diff -u -r1.9 JMUnmarshallerHandlerImpl.java --- org/apache/ws/jaxme/impl/JMUnmarshallerHandlerImpl.java 30 Jun 2005 08:16:13 -0000 1.9 +++ org/apache/ws/jaxme/impl/JMUnmarshallerHandlerImpl.java 5 Aug 2005 06:52:10 -0000 @@ -17,7 +17,9 @@ package org.apache.ws.jaxme.impl; import java.util.ArrayList; +import java.util.HashMap; import java.util.List; +import java.util.Map; import javax.xml.bind.DatatypeConverterInterface; import javax.xml.bind.JAXBException; @@ -74,6 +76,7 @@ private final StringBuffer sb = new StringBuffer(); private Observer observer; private Object result; + private final Map idMap = new HashMap(); public int getLevel() { return level; } @@ -394,4 +397,17 @@ state = STATE_GROUP; } } + + /** + * @param id XML ID attribute of JAXB object + * @param jaxbObject the JAXB object + * @throws SAXException if duplicate ID + */ + public void addId(String id, Object jaxbObject) throws SAXException { + if (idMap.containsKey(id)) { + throw new SAXException("Duplicate ID " + id); + } + idMap.put(id, jaxbObject); + } + }