Java将字符串xml解组为泛型类

问题描述 投票:0回答:1

我想将字符串xml转换为Object类。因为我有一个返回Object类型的rest服务。因为我需要根据响应字符串将响应作为动态创建的xml返回。但是当我尝试将字符串xml转换为Object类时,它显示以下错误:

javax.xml.bind.UnmarshalException:意外元素

我会为你分享我的代码,也许我有任何错误。

服务方式:

@POST
@Path("/post")
@Consumes(MediaType.APPLICATION_JSON)
public  Object sendReqXML(RequestModel request)
{
    try {

        XmlAPI.getInstance().addHeader("Content-Type","text/xml; charset=utf-8");
        XmlAPI.getInstance().addHeader("SOAPAction",request.getAction());
        return XmlAPI.getInstance().post(request.getUrl(), request.getAction(), Parser.loadXML(request.getData()), new CallBackEpul());

    }
    catch (Exception e) {
        e.printStackTrace();
        return e.getMessage();
    }

}

解析方法:

 public static Object loadXMLToObject(String xml) throws Exception
{
    JAXBContext jaxbContext = JAXBContext.newInstance(Object.class);
    Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller();
   //jaxbUnmarshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);

    StringReader reader = new StringReader(xml);
    Object object = (Object) jaxbUnmarshaller.unmarshal(reader);

    //LOGGER.info(car.toString());
    return object;
}

xml字符串:

"<ResultCodes>UnknownError</ResultCodes><Description>Unknown Error</Description>"

我怀疑它可能与@xmlrootelement相关,必须在返回类型对象中声明。因为当我创建具有@XmlRootElement和@XmlElement标记的模型类并返回自身时,它对于对象类是可行的。

提前致谢。

java xml jax-rs marshalling unmarshalling
1个回答
0
投票

我发现将@Produces设置为APPLICATION_XML并返回String就足够了:

@POST
 @Path("/post")
 @Consumes(MediaType.APPLICATION_JSON)
 @Produces (MediaType.APPLICATION_XML)
 public String sendReqXML(RequestModel request)
{
    try {

        /** JSON API **/
        //JsonAPI.getInstance().addHeader("Content-Type","text/xml; charset=utf-8");
        //JsonAPI.getInstance().addHeader("SOAPAction",request.getAction());
        //JsonAPI.getInstance().post(request.getUrl(), request.getAction(), Parser.loadXML(request.getData()), new CallBackEpul());

        /** XML API **/
        XmlAPI.getInstance().addHeader("Content-Type","text/xml; charset=utf-8");
        XmlAPI.getInstance().addHeader("SOAPAction",request.getAction());
        return XmlAPI.getInstance().post(request.getUrl(), request.getAction(), Parser.loadXML(request.getData()), new CallBackEpul());

    }
    catch (Exception e) {
        e.printStackTrace();
        return "";
    }

}
© www.soinside.com 2019 - 2024. All rights reserved.