【问题标题】:Java unmarshal string xml to generic type classJava 将字符串 xml 解组为泛型类型类
【发布时间】:2018-08-08 09:56:11
【问题描述】:

我想将字符串 xml 转换为 Object 类型类。因为我有一个返回对象类型的休息服务。因为我需要根据响应字符串将响应作为动态创建的 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】:

    我发现将 @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 "";
        }
    
    }
    

    【讨论】:

      猜你喜欢
      • 2021-12-01
      • 2011-06-29
      • 1970-01-01
      • 1970-01-01
      • 2021-10-25
      • 2019-09-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多