NullPointerException when unmarshalling with JAXB 1.0
I get the following error when unmarshalling with JAXB 1.0:
Exception java.lang.NullPointerException - Profile2User(): null java.lang.NullPointerException
java.lang.NullPointerException
at com.sun.xml.bind.unmarshaller.DOMScanner.visit(DOMScanner.java:139)
at com.sun.xml.bind.unmarshaller.DOMScanner.parse(DOMScanner.java:72)
at com.kpn.alk.dispatcher.jaxb.impl.runtime.UnmarshallerImpl.unmarshal(UnmarshallerImpl.java:168)
at com.kpn.alk.business.Profile2User.parse(Profile2User.java:139)
at com.kpn.alk.action.voip.admin.AdminAction.initAction(AdminAction.java:289)
My code in the Profile2User class looks like this:
package com.kpn.alk.business;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.w3c.dom.NamedNodeMap;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Unmarshaller;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.DocumentBuilder;
import com.kpn.alk.dispatcher.jaxb.Profile;
import com.kpn.alk.action.voip.VoipActionSupport;
public class Profile2User extends VoipActionSupport{
private static final ....;
....;
private NodeList profile_node = null;
public Profile2User(NodeList list) {
profile_node = list;
}
public void parse() {
Node root = null;
try {
JAXBContext jc = JAXBContext.newInstance("com.kpn.alk.dispatcher.jaxb", this.getClass().getClassLoader());
Unmarshaller unmarshaller = jc.createUnmarshaller();
unmarshaller.setValidating(true);
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
dbf.setNamespaceAware(true);
DocumentBuilder db = dbf.newDocumentBuilder();
Document document = db.newDocument();
if(profile_node!=null) {
int size = profile_node.getLength();
for (int i = 0; i < size; i++) {
Node node = profile_node.item(i);
Element e = (Element)node;
System.out.println("DOM Implementation Element: " + e.getClass().getName());
if(node!=null){
Node child = node.getFirstChild();
String name = child.getNodeName();
if (name.equals(PROFILE_ELEMENT)) {
root = document.importNode(child, true);
}
}
}
} else {
}
//StringBuffer xmlStr = new StringBuffer( "<?xml version=\"1.0\"?><profile><mt></mt><vt><ckr>DKVF1513</ckr></vt></profile>" );
//Profile profile = (Profile)unmarshaller.unmarshal( new StreamSource( new StringReader( xmlStr.toString() ) ) );
Profile profile = (Profile)unmarshaller.unmarshal(root.getOwnerDocument() );
} catch (JAXBException e){
System.out.println("code = "+e.getErrorCode()+" message = "+e.toString() ) ;
} catch (Exception e ) {
System.out.println("Exception "+e.getClass().getName()+" - Profile2User(): " + e.getMessage()+" "+ e.toString());
e.printStackTrace();
}
}
My xsd is as follows:
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:isp="http://dualplay.kpn.com/webservices/isp/DualPlay_CC_Manager_UserRead">
<xs:element name="profile">
<xs:annotation>
<xs:documentation>Profile View: KPN.COM user authorization profile: fixed and mobile</xs:documentation>
</xs:annotation>
<xs:complexType>
<xs:sequence>
<xs:element name="errors" minOccurs="0">
<xs:complexType>
<xs:sequence>
<xs:element name="error" type="error" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="vt" type="vtType" minOccurs="0">
<xs:annotation>
<xs:documentation>VT View</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element name="mt" type="mtType" minOccurs="0">
<xs:annotation>
<xs:documentation>MT View</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element name="subaut" type="subautType" minOccurs="0">
<xs:annotation>
<xs:documentation>Subaut View: IAM subauthorizations</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element name="personalized" type="personalizedType" minOccurs="0">
<xs:annotation>
<xs:documentation>Personalizations</xs:documentation>
</xs:annotation>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:complexType name="error">
<xs:annotation>
<xs:documentation>Error during authorizations retrieval</xs:documentation>
</xs:annotation>
<xs:sequence>
<xs:element name="dynamictext" type="xs:string"/>
<xs:element name="errorcode" type="xs:unsignedShort"/>
<xs:element name="message" type="xs:string"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="mtType">
<xs:annotation>
<xs:documentation>Type of mobile authorisation</xs:documentation>
</xs:annotation>
<xs:sequence>
<xs:element name="roles" type="rolesType"/>
<xs:element name="loyalty" type="loyaltyType" minOccurs="0"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="loyaltyType">
<xs:annotation>
<xs:documentation>Loyalty type</xs:documentation>
</xs:annotation>
<xs:sequence>
<xs:element name="customer-id" type="xs:string"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="vtType">
<xs:annotation>
<xs:documentation>Type of fixed authorisation</xs:documentation>
</xs:annotation>
<xs:sequence>
<xs:element name="ckr" type="xs:string" minOccurs="0"/>
<xs:element name="ckrtemp" type="xs:string" minOccurs="0"/>
<xs:element name="roles" type="rolesType"/>
<xs:element name="locations" type="locationsType">
<xs:annotation>
<xs:documentation>DualPlay View</xs:documentation>
</xs:annotation>
</xs:element>
</xs:sequence>
</xs:complexType>
<xs:complexType name="rolesType">
<xs:annotation>
<xs:documentation>List of roles</xs:documentation>
</xs:annotation>
<xs:sequence>
<xs:element name="role" type="xs:unsignedShort" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="locationsType">
<xs:annotation>
<xs:documentation>Locations for installed base</xs:documentation>
</xs:annotation>
<xs:sequence maxOccurs="unbounded">
<xs:element name="location" type="locationType" minOccurs="0"/>
</xs:sequence>
<xs:attribute name="selecteddualplay" type="xs:string"/>
</xs:complexType>
<xs:complexType name="locationType">
<xs:annotation>
<xs:documentation>Location for installed base</xs:documentation>
</xs:annotation>
<xs:sequence>
<xs:element name="streetname" type="xs:string"/>
<xs:element name="housenumber" type="xs:unsignedShort"/>
<xs:element name="housenumberext" type="xs:string"/>
<xs:element name="postalcode" type="xs:string"/>
<xs:element name="cityname" type="xs:string"/>
<xs:element name="dualplays" type="dualPlaysType"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="dualPlaysType">
<xs:annotation>
<xs:documentation>Dual play products</xs:documentation>
</xs:annotation>
<xs:sequence>
<xs:element name="dualplay" type="dualPlayType" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="dualPlayType">
<xs:annotation>
<xs:documentation>Dual play product</xs:documentation>
</xs:annotation>
<xs:sequence>
<xs:element name="dualplayid" type="xs:string"/>
<xs:element name="serviceid" type="xs:string"/>
<xs:element name="dualplaytype" type="abboType"/>
<xs:element name="phase" type="phaseType"/>
<xs:element name="initialized" type="xs:boolean"/>
<xs:element name="ispid" type="xs:string"/>
<xs:element name="subscriberid" type="xs:string"/>
<xs:element name="primarymailboxadress" type="xs:string"/>
<xs:element name="voipaccounts" type="voipaccountsType"/>
<xs:choice>
<xs:choice>
<xs:element name="DualPlay_CC_Manager_UserReadResult" type="UserReadType" minOccurs="0"/>
<xs:element name="fasttrackerror" minOccurs="0"/>
<xs:element name="planetinternethetnet" minOccurs="0"/>
</xs:choice>
</xs:choice>
<xs:element name="authorizations" type="authorizationsType"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="UserReadType">
<xs:sequence>
<xs:element name="CallReferenceID" type="xs:string"/>
<xs:element name="ResultCode" type="xs:string"/>
<xs:element name="ResultDescription" type="xs:string"/>
<xs:element name="AccountID" type="xs:string"/>
<xs:element name="BankAccount" type="xs:string"/>
<xs:element name="BankAccountName" type="xs:string"/>
<xs:element name="BankAccountCity" type="xs:string"/>
<xs:element name="PrimaryMailboxID" type="xs:string"/>
<xs:element name="FreeMailboxThreshold" type="xs:string"/>
<xs:element name="MailboxCount" type="xs:string"/>
<xs:element name="Mailboxes">
<xs:complexType>
<xs:sequence>
<xs:element name="Mailbox" maxOccurs="unbounded">
<xs:complexType>
<xs:sequence>
<xs:element name="MailboxID" type="xs:string"/>
<xs:element name="AccountName" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
<xs:simpleType name="abboType">
<xs:restriction base="xs:string">
<xs:enumeration value="go"/>
<xs:enumeration value="lite"/>
<xs:enumeration value="basic"/>
<xs:enumeration value="extra"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="phaseType">
<xs:restriction base="xs:string">
<xs:enumeration value="aangelegd"/>
<xs:enumeration value="in opheffing"/>
</xs:restriction>
</xs:simpleType>
<xs:complexType name="voipaccountsType">
<xs:sequence>
<xs:element name="voipaccount" type="voipaccountType" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="voipaccountType">
<xs:sequence>
<xs:element name="telnumber" type="xs:string"/>
<xs:element name="callbundle" type="callBundleType"/>
</xs:sequence>
<xs:attribute name="type" type="accountType"/>
</xs:complexType>
<xs:simpleType name="callBundleType">
<xs:restriction base="xs:string">
<xs:enumeration value="night"/>
<xs:enumeration value="evening"/>
<xs:enumeration value="always"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="accountType">
<xs:restriction base="xs:string">
<xs:enumeration value="main"/>
<xs:enumeration value="extra"/>
<xs:enumeration value="nomadic"/>
</xs:restriction>
</xs:simpleType>
<xs:complexType name="subautType">
<xs:annotation>
<xs:documentation>Type for subauthorizations from Anox IAM</xs:documentation>
</xs:annotation>
<xs:sequence>
<xs:element name="service" type="xs:string" maxOccurs="unbounded"/>
<xs:choice minOccurs="0">
<xs:element name="phone" type="xs:string" minOccurs="0" maxOccurs="unbounded"/>
<xs:element name="mail" type="xs:string" minOccurs="0" maxOccurs="unbounded"/>
</xs:choice>
</xs:sequence>
<xs:attribute name="id" type="xs:string" use="required"/>
</xs:complexType>
<xs:complexType name="personalizedType">
<xs:annotation>
<xs:documentation>Type for personalizations</xs:documentation>
</xs:annotation>
<xs:sequence>
<xs:element name="row" type="rowType" minOccurs="0" maxOccurs="unbounded"/>
<xs:element name="resultset" type="xs:string"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="rowType">
<xs:annotation>
<xs:documentation>Type for personalizations rows</xs:documentation>
</xs:annotation>
<xs:sequence>
<xs:element name="column" type="columnType" maxOccurs="unbounded"/>
</xs:sequence>
<xs:attribute name="rownum" type="xs:unsignedShort"/>
</xs:complexType>
<xs:complexType name="columnType">
<xs:annotation>
<xs:documentation>Type for personalizations columns</xs:documentation>
</xs:annotation>
<xs:simpleContent>
<xs:extension base="xs:string">
<xs:attribute name="name" type="xs:string"/>
<xs:attribute name="type" type="xs:string"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
<xs:complexType name="authorizationsType">
<xs:annotation>
<xs:documentation>Type for authorizations, i.e. services the user is
authorized for</xs:documentation>
</xs:annotation>
<xs:sequence>
<xs:element name="service" type="xs:integer" minOccurs="0"
maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
</xs:schema>
And my xml is as follows:
<?xml version="1.0"?>
<profile>
<vt>
<roles>
<role>29</role>
<role>18</role>
<role>2</role>
<role>20</role>
<role>10</role>
<role>24</role>
<role>9</role>
<role>15</role>
<role>11</role>
<role>4</role>
<role>19</role>
<role>8</role>
<role>12</role>
</roles>
<ckr>CQCK6934</ckr>
<locations selecteddualplay="5000000001">
<location>
<streetname>De Horst</streetname>
<housenumber>25</housenumber>
<housenumberext>b</housenumberext>
<postalcode>9781 XW</postalcode>
<cityname>BEDUM</cityname>
<dualplays>
<dualplay>
<dualplayid>5000000001</dualplayid>
<serviceid>dienstnr6339</serviceid>
<initialized>true</initialized>
<abbotype>lite</abbotype>
<ispid>80000049</ispid>
<subscriberid>5108</subscriberid>
<voipaccounts>
<voipaccount type="main">
<telnumber>0503013460</telnumber>
<callbundle>evening</callbundle>
</voipaccount>
<voipaccount type="extra">
<telnumber>0504889663</telnumber>
<callbundle>always</callbundle>
</voipaccount>
<voipaccount type="nomadic">
<telnumber>0843553431</telnumber>
<callbundle>evening</callbundle>
</voipaccount>
<voipaccount type="nomadic">
<telnumber>0843553645</telnumber>
<callbundle>evening</callbundle>
</voipaccount>
</voipaccounts>
<DualPlay_CC_Manager_UserReadResponse>
<DualPlay_CC_Manager_UserReadResult>
<CallReferenceID>
M2Y4NWM3OjEwNmM0YTk1NTJjOi03ZjE3</CallReferenceID>
<ResultCode>2.0.0</ResultCode>
<ResultDescription>Success.</ResultDescription>
<AccountID>80001409</AccountID>
<BankAccount>1234567</BankAccount>
<BankAccountName>P. Paulussen</BankAccountName>
<BankAccountCity/>
<PrimaryMailboxID>260261</PrimaryMailboxID>
<FreeMailboxThreshold>1</FreeMailboxThreshold>
<MailboxCount>3</MailboxCount>
<Mailboxes>
<Mailbox>
<MailboxID>260261</MailboxID>
<AccountName>ipbtest150</AccountName>
</Mailbox>
<Mailbox>
<MailboxID>258325</MailboxID>
<AccountName>ipbtest150A</AccountName>
</Mailbox>
<Mailbox>
<MailboxID>259221</MailboxID>
<AccountName>ipbtest150B</AccountName>
</Mailbox>
</Mailboxes>
</DualPlay_CC_Manager_UserReadResult>
</DualPlay_CC_Manager_UserReadResponse>
</dualplay>
</dualplays>
</location>
<location>
<streetname>De Dorst</streetname>
<housenumber>26</housenumber>
<housenumberext/>
<postalcode>9781 XW</postalcode>
<cityname>BEDUM</cityname>
<dualplays>
<dualplay>
<dualplayid>5000000002</dualplayid>
<serviceid>dienstnr6339</serviceid>
<initialized>true</initialized>
<abbotype>lite</abbotype>
<ispid>80000049</ispid>
<subscriberid>5108</subscriberid>
<voipaccounts>
<voipaccount type="main">
<telnumber>0501234567</telnumber>
<callbundle>evening</callbundle>
</voipaccount>
<voipaccount type="extra">
<telnumber>0502345678</telnumber>
<callbundle>always</callbundle>
</voipaccount>
<voipaccount type="nomadic">
<telnumber>0843553431</telnumber>
<callbundle>evening</callbundle>
</voipaccount>
<voipaccount type="nomadic">
<telnumber>0843553645</telnumber>
<callbundle>evening</callbundle>
</voipaccount>
</voipaccounts>
<DualPlay_CC_Manager_UserReadResponse>
<DualPlay_CC_Manager_UserReadResult>
<CallReferenceID>
M2Y4NWM3OjEwNmM0YTk1NTJjOi03ZjE3</CallReferenceID>
<ResultCode>2.0.0</ResultCode>
<ResultDescription>Success.</ResultDescription>
<AccountID>80001409</AccountID>
<BankAccount>1234567</BankAccount>
<BankAccountName>P. Paulussen</BankAccountName>
<BankAccountCity/>
<PrimaryMailboxID>260261</PrimaryMailboxID>
<FreeMailboxThreshold>1</FreeMailboxThreshold>
<MailboxCount>3</MailboxCount>
<Mailboxes>
<Mailbox>
<MailboxID>260261</MailboxID>
<AccountName>ipbtest150</AccountName>
</Mailbox>
<Mailbox>
<MailboxID>258325</MailboxID>
<AccountName>ipbtest150A</AccountName>
</Mailbox>
<Mailbox>
<MailboxID>259221</MailboxID>
<AccountName>ipbtest150B</AccountName>
</Mailbox>
</Mailboxes>
</DualPlay_CC_Manager_UserReadResult>
</DualPlay_CC_Manager_UserReadResponse>
</dualplay>
</dualplays>
</location>
</locations>
</vt>
<mt>
<roles>
<role>06012</role>
<role>02012</role>
<role>02033</role>
<role>06013</role>
<role>01013</role>
<role>01033</role>
<role>01012</role>
<role>02013</role>
<role>01032</role>
<role>06032</role>
<role>06033</role>
<role>02032</role>
</roles>
</mt>
</profile>
I work with JAXB 1.0. The class that implements the Element interface is org.apache.xerces.dom.DeferredElementNSImpl. (I used two statements in Profile2User to check this, because in forums I have noticed this could be a problem). We have xerces-2.4.0.jar.
Pease help me, because it has taken me already a day or three!!

