diff --git a/basic/src/main/java/org/jvnet/jaxb2_commons/plugin/elementwrapper/ElementWrapperPlugin.java b/basic/src/main/java/org/jvnet/jaxb2_commons/plugin/elementwrapper/ElementWrapperPlugin.java index 5a4e6ec1..364ea76d 100644 --- a/basic/src/main/java/org/jvnet/jaxb2_commons/plugin/elementwrapper/ElementWrapperPlugin.java +++ b/basic/src/main/java/org/jvnet/jaxb2_commons/plugin/elementwrapper/ElementWrapperPlugin.java @@ -184,7 +184,8 @@ protected void processWrappedElementPropertyInfo( wrappedPropertyInfo.isCollection(), wrappedPropertyInfo.getTypeInfo(), wrappedPropertyInfo.getElementName(), - wrapperPropertyInfo.getElementName()); + wrapperPropertyInfo.getWrapperElementName(), + wrappedPropertyInfo.isNillable()); rootClassInfo.addProperty(propertyInfo); diff --git a/runtime/src/main/java/org/jvnet/jaxb2_commons/xml/bind/model/MElementTypeInfo.java b/runtime/src/main/java/org/jvnet/jaxb2_commons/xml/bind/model/MElementTypeInfo.java index fe281ce6..fe0d79aa 100644 --- a/runtime/src/main/java/org/jvnet/jaxb2_commons/xml/bind/model/MElementTypeInfo.java +++ b/runtime/src/main/java/org/jvnet/jaxb2_commons/xml/bind/model/MElementTypeInfo.java @@ -2,7 +2,8 @@ import javax.xml.namespace.QName; -public interface MElementTypeInfo extends MTyped { +public interface MElementTypeInfo extends MTyped, + MNillable { public QName getElementName(); diff --git a/runtime/src/main/java/org/jvnet/jaxb2_commons/xml/bind/model/MNillable.java b/runtime/src/main/java/org/jvnet/jaxb2_commons/xml/bind/model/MNillable.java new file mode 100644 index 00000000..7af37409 --- /dev/null +++ b/runtime/src/main/java/org/jvnet/jaxb2_commons/xml/bind/model/MNillable.java @@ -0,0 +1,6 @@ +package org.jvnet.jaxb2_commons.xml.bind.model; + +public interface MNillable { + + public boolean isNillable(); +} diff --git a/runtime/src/main/java/org/jvnet/jaxb2_commons/xml/bind/model/concrete/CMElementInfo.java b/runtime/src/main/java/org/jvnet/jaxb2_commons/xml/bind/model/concrete/CMElementInfo.java index 660c2a16..87f0796f 100644 --- a/runtime/src/main/java/org/jvnet/jaxb2_commons/xml/bind/model/concrete/CMElementInfo.java +++ b/runtime/src/main/java/org/jvnet/jaxb2_commons/xml/bind/model/concrete/CMElementInfo.java @@ -95,6 +95,11 @@ public MTypeInfo getTypeInfo() { public QName getSubstitutionHead() { return substitutionHead; } + + @Override + public boolean isNillable() { + return true; + } public String toString() { return MessageFormat.format("ElementInfo [{0}: {1}]", getElementName(), diff --git a/runtime/src/main/java/org/jvnet/jaxb2_commons/xml/bind/model/concrete/CMElementPropertyInfo.java b/runtime/src/main/java/org/jvnet/jaxb2_commons/xml/bind/model/concrete/CMElementPropertyInfo.java index 6e798e73..8adcd847 100644 --- a/runtime/src/main/java/org/jvnet/jaxb2_commons/xml/bind/model/concrete/CMElementPropertyInfo.java +++ b/runtime/src/main/java/org/jvnet/jaxb2_commons/xml/bind/model/concrete/CMElementPropertyInfo.java @@ -14,15 +14,17 @@ public class CMElementPropertyInfo extends CMPropertyInfo private final MTypeInfo typeInfo; private final QName elementName; private final QName wrapperElementName; + private final boolean nillable; public CMElementPropertyInfo(MPropertyInfoOrigin origin, MClassInfo classInfo, String privateName, boolean collection, MTypeInfo typeInfo, QName elementName, - QName wrapperElementName) { + QName wrapperElementName, boolean nillable) { super(origin, classInfo, privateName, collection); this.typeInfo = typeInfo; this.elementName = elementName; this.wrapperElementName = wrapperElementName; + this.nillable = nillable; } public MTypeInfo getTypeInfo() { @@ -36,6 +38,11 @@ public QName getElementName() { public QName getWrapperElementName() { return wrapperElementName; } + + @Override + public boolean isNillable() { + return nillable; + } public V acceptPropertyInfoVisitor(MPropertyInfoVisitor visitor) { return visitor.visitElementPropertyInfo(this); diff --git a/runtime/src/main/java/org/jvnet/jaxb2_commons/xml/bind/model/concrete/CMElementRefPropertyInfo.java b/runtime/src/main/java/org/jvnet/jaxb2_commons/xml/bind/model/concrete/CMElementRefPropertyInfo.java index 742daf05..565c7a80 100644 --- a/runtime/src/main/java/org/jvnet/jaxb2_commons/xml/bind/model/concrete/CMElementRefPropertyInfo.java +++ b/runtime/src/main/java/org/jvnet/jaxb2_commons/xml/bind/model/concrete/CMElementRefPropertyInfo.java @@ -56,6 +56,11 @@ public boolean isDomAllowed() { public boolean isTypedObjectAllowed() { return typedObjectAllowed; } + + @Override + public boolean isNillable() { + return true; + } public V acceptPropertyInfoVisitor(MPropertyInfoVisitor visitor) { return visitor.visitElementRefPropertyInfo(this); diff --git a/runtime/src/main/java/org/jvnet/jaxb2_commons/xml/bind/model/concrete/CMElementTypeInfo.java b/runtime/src/main/java/org/jvnet/jaxb2_commons/xml/bind/model/concrete/CMElementTypeInfo.java index 583a839b..5d940a2b 100644 --- a/runtime/src/main/java/org/jvnet/jaxb2_commons/xml/bind/model/concrete/CMElementTypeInfo.java +++ b/runtime/src/main/java/org/jvnet/jaxb2_commons/xml/bind/model/concrete/CMElementTypeInfo.java @@ -12,11 +12,14 @@ public class CMElementTypeInfo implements MElementTypeInfo private final MTypeInfo typeInfo; - public CMElementTypeInfo(QName elementName, MTypeInfo typeInfo) { + private final boolean nillable; + + public CMElementTypeInfo(QName elementName, MTypeInfo typeInfo, boolean nillable) { Validate.notNull(elementName); Validate.notNull(typeInfo); this.elementName = elementName; this.typeInfo = typeInfo; + this.nillable = nillable; } public QName getElementName() { @@ -26,7 +29,12 @@ public QName getElementName() { public MTypeInfo getTypeInfo() { return typeInfo; } - + + public boolean isNillable() + { + return this.nillable; + } + @Override public String toString() { return "Element [" + getElementName() + ":" + getTypeInfo() + "]"; diff --git a/runtime/src/main/java/org/jvnet/jaxb2_commons/xml/bind/model/concrete/CMInfoFactory.java b/runtime/src/main/java/org/jvnet/jaxb2_commons/xml/bind/model/concrete/CMInfoFactory.java index 86f16bb3..998ff098 100644 --- a/runtime/src/main/java/org/jvnet/jaxb2_commons/xml/bind/model/concrete/CMInfoFactory.java +++ b/runtime/src/main/java/org/jvnet/jaxb2_commons/xml/bind/model/concrete/CMInfoFactory.java @@ -368,7 +368,8 @@ protected MPropertyInfo createElementPropertyInfo( return new CMElementPropertyInfo( createPropertyInfoOrigin((PI) ep), classInfo, ep.getName(), ep.isCollection() && !ep.isValueList(), - getTypeInfo(ep, typeRef), typeRef.getTagName(), ep.getXmlName()); + getTypeInfo(ep, typeRef), typeRef.getTagName(), + ep.getXmlName(), typeRef.isNillable()); } protected MPropertyInfo createElementsPropertyInfo( @@ -378,7 +379,7 @@ protected MPropertyInfo createElementsPropertyInfo( types.size()); for (TypeRef typeRef : types) { typedElements.add(new CMElementTypeInfo(typeRef.getTagName(), - getTypeInfo(ep, typeRef))); + getTypeInfo(ep, typeRef), typeRef.isNillable())); } return new CMElementsPropertyInfo( createPropertyInfoOrigin((PI) ep), classInfo, ep.getName(), @@ -404,7 +405,7 @@ protected MPropertyInfo createElementRefPropertyInfo( rp.isMixed(), rp.getWildcard() == null ? false : rp.getWildcard().allowDom, - rp.getWildcard() == null ? false + rp.getWildcard() == null ? true : rp.getWildcard().allowTypedObject); } @@ -413,14 +414,14 @@ protected MPropertyInfo createElementRefsPropertyInfo( final List> typedElements = new ArrayList>(); for (Element element : rp.getElements()) { typedElements.add(new CMElementTypeInfo(element - .getElementName(), getTypeInfo(rp, element))); + .getElementName(), getTypeInfo(rp, element), true)); } return new CMElementRefsPropertyInfo( createPropertyInfoOrigin((PI) rp), classInfo, rp.getName(), rp.isCollection(), typedElements, rp.getXmlName(), rp.isMixed(), rp.getWildcard() == null ? false : rp.getWildcard().allowDom, - rp.getWildcard() == null ? false + rp.getWildcard() == null ? true : rp.getWildcard().allowTypedObject); }