好的,我有一个类createUser,它应该创建一个XML文件来存储用户的数据。问题是,当我运行它时,我收到此错误
> ERROR: '' > javax.xml.transform.TransformerException: java.lang.NullPointerException > at com.sun.org.apache.xalan.internal.xsltc.trax.TransformerImpl.transform(Unknown > Source) > at com.sun.org.apache.xalan.internal.xsltc.trax.TransformerImpl.transform(Unknown > Source) > at CreateUser.makeUser(CreateUser.java:156) > at Welcomeclass.welcome(Welcomeclass.java:48) > at Welcomeclass.main(Welcomeclass.java:32) > Caused by: java.lang.NullPointerException > at com.sun.org.apache.xml.internal.serializer.ToUnknownStream.characters(Unknown > Source) > at com.sun.org.apache.xalan.internal.xsltc.trax.DOM2TO.parse(Unknown > Source) > at com.sun.org.apache.xalan.internal.xsltc.trax.DOM2TO.parse(Unknown > Source) > at com.sun.org.apache.xalan.internal.xsltc.trax.DOM2TO.parse(Unknown > Source) > at com.sun.org.apache.xalan.internal.xsltc.trax.DOM2TO.parse(Unknown > Source) > at com.sun.org.apache.xalan.internal.xsltc.trax.DOM2TO.parse(Unknown > Source) > at com.sun.org.apache.xalan.internal.xsltc.trax.TransformerImpl.transformIdentity(Unknown > Source) > ... 5 more > --------- > java.lang.NullPointerException > at com.sun.org.apache.xml.internal.serializer.ToUnknownStream.characters(Unknown > Source) > at com.sun.org.apache.xalan.internal.xsltc.trax.DOM2TO.parse(Unknown > Source) > at com.sun.org.apache.xalan.internal.xsltc.trax.DOM2TO.parse(Unknown > Source) > at com.sun.org.apache.xalan.internal.xsltc.trax.DOM2TO.parse(Unknown > Source) > at com.sun.org.apache.xalan.internal.xsltc.trax.DOM2TO.parse(Unknown > Source) > at com.sun.org.apache.xalan.internal.xsltc.trax.DOM2TO.parse(Unknown > Source) > at com.sun.org.apache.xalan.internal.xsltc.trax.TransformerImpl.transformIdentity(Unknown > Source) > at com.sun.org.apache.xalan.internal.xsltc.trax.TransformerImpl.transform(Unknown > Source) > at com.sun.org.apache.xalan.internal.xsltc.trax.TransformerImpl.transform(Unknown > Source) > at CreateUser.makeUser(CreateUser.java:156) > at Welcomeclass.welcome(Welcomeclass.java:48) > at Welcomeclass.main(Welcomeclass.java:32)
这意味着它无法将我的doc转换为xml文件。
以下是来自的代码。
/*imports*/
import java.util.Scanner;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerException;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import org.w3c.dom.Attr;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;
/*A class to create a user object and store it in a XML file for later retrieval
public class CreateUser {
static Scanner input = new Scanner(System.in);
/*objects note: must be strings due to being stored in XML table*/
static String name;
static String age;
static String bday;
static String gender;
static String location;
static String orientation;
static String relationship;
static String hobbies;
static String choice;
static String username;
static String password;
static String fileLocation = "C:/Users/Steven/Workspace/twitter/src/users.xml";
int count = 0;
int maxId = 0;
static int nextId = 0;
public static void makeUser() throws SAXException, IOException {
/*gets user input to fill String objects*/
System.out.println("Hello, to register we will need some information about you.");
System.out.println("What is your name?");
name = input.nextLine();
System.out.println("How old are you(e.g. 45)?");
age = input.nextLine();
System.out.println("When is your birthday(MM/DD/YYYY)?");
bday = input.nextLine();
System.out.println("What is your gender?");
gender = input.nextLine();
System.out.println("Where do you live?");
location = input.nextLine();
System.out.println("What is your orientation?");
orientation = input.nextLine();
System.out.println("Are you in a relationship? (y/n)");
choice = input.nextLine();
if(choice.equals("y"))
relationship = "In a relationship.";
if(choice.equals("y"))
relationship = "Single.";
System.out.println("What are your hobbies?");
hobbies = input.nextLine();
System.out.println("What will be your username?");
username = input.nextLine();
System.out.println("What will be your password?");
password = input.nextLine();
/*create XML file to store the data*/
try{
DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder docBuilder = docFactory.newDocumentBuilder();
Document userslist = docBuilder.newDocument();
/*create user element*/
Element users = userslist.createElement("users");
userslist.appendChild(users);
Element user = userslist.createElement("user");
users.appendChild(user);
/*get the max id to set the next id if the file exists*/
File xmlFile = new File(fileLocation);
if(xmlFile.exists())
{
DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
Document idgetter = dBuilder.parse(xmlFile);
idgetter.getDocumentElement().normalize();
NodeList nodes = idgetter.getElementsByTagName("id");
int maxId = 0;
for(int i = 0; i < nodes.getLength(); i++){
if(Integer.parseInt(nodes.item(i).getTextContent()) > maxId )
{
maxId = Integer.parseInt(nodes.item(i).getTextContent());
}
}
nextId = maxId +1;
}
/*else create the file*/
else
{
/*create the id attribute*/
Attr attr = userslist.createAttribute("id");
attr.setValue(String.valueOf(nextId));
user.setAttributeNode(attr);
/*fill in doc with objects*/
Element dname = userslist.createElement("name");
dname.appendChild(userslist.createTextNode(name));
user.appendChild(dname);
Element dgender = userslist.createElement("gender");
dgender.appendChild(userslist.createTextNode(gender));
user.appendChild(dgender);
Element dlocation = userslist.createElement("location");
dlocation.appendChild(userslist.createTextNode(location));
user.appendChild(dlocation);
Element dorientation = userslist.createElement("orientation");
dorientation.appendChild(userslist.createTextNode(orientation));
user.appendChild(dorientation);
Element drelationship = userslist.createElement("relationship");
drelationship.appendChild(userslist.createTextNode(relationship));
user.appendChild(drelationship);
Element dhobbies = userslist.createElement("hobbies");
dhobbies.appendChild(userslist.createTextNode(hobbies));
user.appendChild(dhobbies);
Element dchoice = userslist.createElement("choice");
dchoice.appendChild(userslist.createTextNode(choice));
user.appendChild(dchoice);
Element dusername = userslist.createElement("username");
dusername.appendChild(userslist.createTextNode(username));
user.appendChild(dusername);
Element dpassword = userslist.createElement("password");
dpassword.appendChild(userslist.createTextNode(password));
user.appendChild(dpassword);
Element dbday = userslist.createElement("birthday");
dbday.appendChild(userslist.createTextNode(bday));
user.appendChild(dbday);
Element dage = userslist.createElement("age");
dage.appendChild(userslist.createTextNode(age));
user.appendChild(dage);
/*transfer document to XML*/
TransformerFactory transformerFactory = TransformerFactory.newInstance();
Transformer transformer = transformerFactory.newTransformer();
DOMSource source = new DOMSource(users);
/*create the document in append mode */
//StreamResult result = new StreamResult(new FileWriter(fileLocation, true));
StreamResult result = new StreamResult(System.out);
transformer.transform(source, result);
}
} catch (ParserConfigurationException pce) {
pce.printStackTrace();
} catch (TransformerException tfe) {
tfe.printStackTrace();
}
}
}
如果你不想花时间自己麻烦拍摄,或者仔细研究它,但如果你有关于如何排除变压器问题的想法那就太棒了。因为我很难弄清楚究竟是什么导致了这个问题。
答案 0 :(得分:5)
因为该对象不是有效的XML,或者因为XML具有空(null)文本节点。
显示java.lang.NullPointerException
at com.sun.org.apache.xml.internal.serializer.ToUnknownStream.characters(Unknown
> Source)
如果你看看你会看到代码。为了避免这种情况,请确保你从用户那里得到的所有条目都不是空的,
int length = readValue.length();
if (length == 0){
throw new NullPointerException("Node value can not be null");
}
此外,您是否可以检查对象是否为有效的XML,以及字符实体等是否已正确编码。
答案 1 :(得分:3)
当为关系问题输入NullPointerException
以外的内容时,您会收到y
。
if (choice.equals("y"))
relationship = "In a relationship.";
if (choice.equals("y"))
relationship = "Single.";
快速解决方法是为字段relationship
if ("y".equals(choice)) {
relationship = "In a relationship.";
else {
relationship = "Single.";
}