Skip to content

Commit 1a0d87e

Browse files
committed
Issue #25.
1 parent bd6efa8 commit 1a0d87e

File tree

8 files changed

+44
-10
lines changed

8 files changed

+44
-10
lines changed

basic/src/main/java/org/jvnet/jaxb2_commons/plugin/elementwrapper/ElementWrapperPlugin.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -184,7 +184,8 @@ protected void processWrappedElementPropertyInfo(
184184
wrappedPropertyInfo.isCollection(),
185185
wrappedPropertyInfo.getTypeInfo(),
186186
wrappedPropertyInfo.getElementName(),
187-
wrapperPropertyInfo.getElementName());
187+
wrapperPropertyInfo.getWrapperElementName(),
188+
wrappedPropertyInfo.isNillable());
188189

189190
rootClassInfo.addProperty(propertyInfo);
190191

runtime/src/main/java/org/jvnet/jaxb2_commons/xml/bind/model/MElementTypeInfo.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,8 @@
22

33
import javax.xml.namespace.QName;
44

5-
public interface MElementTypeInfo<T, C extends T> extends MTyped<T, C> {
5+
public interface MElementTypeInfo<T, C extends T> extends MTyped<T, C>,
6+
MNillable {
67

78
public QName getElementName();
89

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
package org.jvnet.jaxb2_commons.xml.bind.model;
2+
3+
public interface MNillable {
4+
5+
public boolean isNillable();
6+
}

runtime/src/main/java/org/jvnet/jaxb2_commons/xml/bind/model/concrete/CMElementInfo.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -95,6 +95,11 @@ public MTypeInfo<T, C> getTypeInfo() {
9595
public QName getSubstitutionHead() {
9696
return substitutionHead;
9797
}
98+
99+
@Override
100+
public boolean isNillable() {
101+
return true;
102+
}
98103

99104
public String toString() {
100105
return MessageFormat.format("ElementInfo [{0}: {1}]", getElementName(),

runtime/src/main/java/org/jvnet/jaxb2_commons/xml/bind/model/concrete/CMElementPropertyInfo.java

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,15 +14,17 @@ public class CMElementPropertyInfo<T, C extends T> extends CMPropertyInfo<T, C>
1414
private final MTypeInfo<T, C> typeInfo;
1515
private final QName elementName;
1616
private final QName wrapperElementName;
17+
private final boolean nillable;
1718

1819
public CMElementPropertyInfo(MPropertyInfoOrigin origin,
1920
MClassInfo<T, C> classInfo, String privateName, boolean collection,
2021
MTypeInfo<T, C> typeInfo, QName elementName,
21-
QName wrapperElementName) {
22+
QName wrapperElementName, boolean nillable) {
2223
super(origin, classInfo, privateName, collection);
2324
this.typeInfo = typeInfo;
2425
this.elementName = elementName;
2526
this.wrapperElementName = wrapperElementName;
27+
this.nillable = nillable;
2628
}
2729

2830
public MTypeInfo<T, C> getTypeInfo() {
@@ -36,6 +38,11 @@ public QName getElementName() {
3638
public QName getWrapperElementName() {
3739
return wrapperElementName;
3840
}
41+
42+
@Override
43+
public boolean isNillable() {
44+
return nillable;
45+
}
3946

4047
public <V> V acceptPropertyInfoVisitor(MPropertyInfoVisitor<T, C, V> visitor) {
4148
return visitor.visitElementPropertyInfo(this);

runtime/src/main/java/org/jvnet/jaxb2_commons/xml/bind/model/concrete/CMElementRefPropertyInfo.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,11 @@ public boolean isDomAllowed() {
5656
public boolean isTypedObjectAllowed() {
5757
return typedObjectAllowed;
5858
}
59+
60+
@Override
61+
public boolean isNillable() {
62+
return true;
63+
}
5964

6065
public <V> V acceptPropertyInfoVisitor(MPropertyInfoVisitor<T, C, V> visitor) {
6166
return visitor.visitElementRefPropertyInfo(this);

runtime/src/main/java/org/jvnet/jaxb2_commons/xml/bind/model/concrete/CMElementTypeInfo.java

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,11 +12,14 @@ public class CMElementTypeInfo<T, C extends T> implements MElementTypeInfo<T, C>
1212

1313
private final MTypeInfo<T, C> typeInfo;
1414

15-
public CMElementTypeInfo(QName elementName, MTypeInfo<T, C> typeInfo) {
15+
private final boolean nillable;
16+
17+
public CMElementTypeInfo(QName elementName, MTypeInfo<T, C> typeInfo, boolean nillable) {
1618
Validate.notNull(elementName);
1719
Validate.notNull(typeInfo);
1820
this.elementName = elementName;
1921
this.typeInfo = typeInfo;
22+
this.nillable = nillable;
2023
}
2124

2225
public QName getElementName() {
@@ -26,7 +29,12 @@ public QName getElementName() {
2629
public MTypeInfo<T, C> getTypeInfo() {
2730
return typeInfo;
2831
}
29-
32+
33+
public boolean isNillable()
34+
{
35+
return this.nillable;
36+
}
37+
3038
@Override
3139
public String toString() {
3240
return "Element [" + getElementName() + ":" + getTypeInfo() + "]";

runtime/src/main/java/org/jvnet/jaxb2_commons/xml/bind/model/concrete/CMInfoFactory.java

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -368,7 +368,8 @@ protected MPropertyInfo<T, C> createElementPropertyInfo(
368368
return new CMElementPropertyInfo<T, C>(
369369
createPropertyInfoOrigin((PI) ep), classInfo, ep.getName(),
370370
ep.isCollection() && !ep.isValueList(),
371-
getTypeInfo(ep, typeRef), typeRef.getTagName(), ep.getXmlName());
371+
getTypeInfo(ep, typeRef), typeRef.getTagName(),
372+
ep.getXmlName(), typeRef.isNillable());
372373
}
373374

374375
protected MPropertyInfo<T, C> createElementsPropertyInfo(
@@ -378,7 +379,7 @@ protected MPropertyInfo<T, C> createElementsPropertyInfo(
378379
types.size());
379380
for (TypeRef<T, C> typeRef : types) {
380381
typedElements.add(new CMElementTypeInfo<T, C>(typeRef.getTagName(),
381-
getTypeInfo(ep, typeRef)));
382+
getTypeInfo(ep, typeRef), typeRef.isNillable()));
382383
}
383384
return new CMElementsPropertyInfo<T, C>(
384385
createPropertyInfoOrigin((PI) ep), classInfo, ep.getName(),
@@ -404,7 +405,7 @@ protected MPropertyInfo<T, C> createElementRefPropertyInfo(
404405

405406
rp.isMixed(), rp.getWildcard() == null ? false
406407
: rp.getWildcard().allowDom,
407-
rp.getWildcard() == null ? false
408+
rp.getWildcard() == null ? true
408409
: rp.getWildcard().allowTypedObject);
409410
}
410411

@@ -413,14 +414,14 @@ protected MPropertyInfo<T, C> createElementRefsPropertyInfo(
413414
final List<MElementTypeInfo<T, C>> typedElements = new ArrayList<MElementTypeInfo<T, C>>();
414415
for (Element<T, C> element : rp.getElements()) {
415416
typedElements.add(new CMElementTypeInfo<T, C>(element
416-
.getElementName(), getTypeInfo(rp, element)));
417+
.getElementName(), getTypeInfo(rp, element), true));
417418
}
418419
return new CMElementRefsPropertyInfo<T, C>(
419420
createPropertyInfoOrigin((PI) rp), classInfo, rp.getName(),
420421
rp.isCollection(), typedElements, rp.getXmlName(),
421422
rp.isMixed(), rp.getWildcard() == null ? false
422423
: rp.getWildcard().allowDom,
423-
rp.getWildcard() == null ? false
424+
rp.getWildcard() == null ? true
424425
: rp.getWildcard().allowTypedObject);
425426
}
426427

0 commit comments

Comments
 (0)