我正在尝试在客户端解组JAXB,但我将对象的属性设为NULL。
这就是我正在做的解组
URL url = new URL("http://localhost:9191/service/firstName/tony?format=xml");
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setRequestMethod("GET");
conn.setRequestProperty("Accept", "application/atom+xml");
if (conn.getResponseCode() != 200) {
throw new RuntimeException("Failed : HTTP error code : "
+ conn.getResponseCode());
}
BufferedReader br = new BufferedReader(new InputStreamReader(
(conn.getInputStream())));
JAXBContext jaxbContext = JAXBContext.newInstance(LDAPUsers.class);
Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller();
LDAPUsers lu = (LDAPUsers) jaxbUnmarshaller.unmarshal(br);
ArrayList<LDAPUser> list = new ArrayList<LDAPUser>();
//list.addAll(lu.getCounty());
**System.out.println(lu.ldapUser.get(0).getFirstName());//this is giving NULL**
conn.disconnect();
请帮助!!!
答案 0 :(得分:0)
检查您的班级是否已正确序列化并使用 @XmlRootElement 和 @XmlElement 进行注释。
检查this example和此other one。另一个full example。
使用一些断言来检查 not null 对象,列表不为空。
最后,如果您使用的是spring 3,我不明白您为什么要管理连接和输入流...尝试使用控制器的方法,也许您需要一个自定义的unmarshaller:
@RequestMapping(method=RequestMethod.GET, value="/myurl")
public ModelAndView getUsers(@RequestBody List<LDAPUsers> users) {
答案 1 :(得分:0)
您可以在ValidationEventhandler
上设置Unmarshaller
的实例,以便在解组过程中发生任何问题时收到通知。这有助于调试问题:
jaxbUnmarshaller.setEventHandler(new ValidationEventHandler() {
@Override
public boolean handleEvent(ValidationEvent event) {
System.out.println(event.getMessage());
return true;
}
});
客户端示例