Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JAXRS,JAXB实现指南_Java_Xml - Fatal编程技术网

Java JAXRS,JAXB实现指南

Java JAXRS,JAXB实现指南,java,xml,Java,Xml,我的要求是:表单提交应该触发LoginServlet,用户名和密码从中传递到UserService.login。如果验证了用户名和密码,则应返回一个用户xml字符串。我需要使用Jaxb或任何其他解析器吗?使用字符串生成器是一个好方法 我将字符串生成器用作: StringBuilder validUser = new StringBuilder(); validUser.append("<username>"); validUser.append(username); validU

我的要求是:表单提交应该触发LoginServlet,用户名和密码从中传递到UserService.login。如果验证了用户名和密码,则应返回一个用户xml字符串。我需要使用Jaxb或任何其他解析器吗?使用字符串生成器是一个好方法

我将字符串生成器用作:

StringBuilder validUser = new StringBuilder();  
validUser.append("<username>");
validUser.append(username);
validUser.append("</username>");
validUser.append("<firstname>");
validUser.append("Jose");
validUser.append("</firstname>");
validUser.append("<lastname>");
validUser.append("Tom");
validUser.append("</lastname>");
validUser.append("</user>");
String result = validUser.toString();
从上面的字符串即结果中,我需要获取/显示firstName,即Jose到UI。
我尝试使用字符串索引,但由于用户名总是变化或用户名长度总是变化,因此无法得到准确的结果。

首先,请注意注释,XML解析器确实是正确的方法。 但是,如果您只想快速修复代码,那么现在,这个代码段将提取必要的信息:

Matcher matcher =  Pattern.compile("<firstname>(.*?)</firstname>").matcher(result);
matcher.find();
System.out.println(matcher.group(1));

首先,如果这是试图通过StringBuilder生成有效的XML,那么您的方法是有争议的

另请参见Jigar Joshi和fnt对您的问题的评论

有许多API可以通过编程方式构建XMl。在你的情况下,因为这是一个简短的文件,我建议

其次,如果您沉溺于一种宽松的方法,并希望通过这种方法构建伪xml,那么您至少需要在StringBuilder初始化后添加以下行,或者将其作为构造函数的参数:

validUser.append("<user>");

最后,要解决您的问题,您可以使用:

String xml = validUser.toString();
System.out.println(
    xml.substring(
        xml.indexOf("<firstname>") + 11, xml.indexOf("</firstname>")
    )
);

使用JAXB实现

部分参考资料包括:

1>

2>

3>

4>

User.java:

@XmlRootElement(name = "user")
@XmlType(propOrder = { "userName", "firstName", "lastName" })
public class User{

    private String userName;
    private String firstName;
    private String lastName;
    ....get/set
@XmlRootElement(name = "status")
@XmlType(propOrder = { "code", "message" })
public class InvalidUser {
    private int code;
    private String message;
    ...set/get
}
}

InvalidUser.java:

@XmlRootElement(name = "user")
@XmlType(propOrder = { "userName", "firstName", "lastName" })
public class User{

    private String userName;
    private String firstName;
    private String lastName;
    ....get/set
@XmlRootElement(name = "status")
@XmlType(propOrder = { "code", "message" })
public class InvalidUser {
    private int code;
    private String message;
    ...set/get
}

为什么不使用XML解析器而不是解析基于文本索引的XML?为什么不使用DOM/SAX来处理XML?我可以使用JAXB而不是DOM吗?通常使用JAXB将XML绑定到数据类,但是,如果您有数据,则可以使用任何绑定框架序列化为XML。我的要求是:表单提交应该触发LoginServlet,用户名和密码从中传递到UserService.login。如果验证了用户名和密码,则应返回一个用户xml字符串。这是否意味着,即字符串应该返回意味着我需要创建字符串,或者我可以使用JAXB/DOM?@akb同样,您应该使用序列化器或拖缆或任何适当的数据表示框架来处理XML。从这里到所讨论的对象的字符串表示,它通常非常简单。