当前位置: 首页 > 知识库问答 >
问题:

Java解封字符串xml到泛型类型类

潘哲
2023-03-14

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

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;
}
"<ResultCodes>UnknownError</ResultCodes><Description>Unknown Error</Description>"

共有1个答案

邓崇凛
2023-03-14

我发现将@produces设置为APPLICATION_XML并返回字符串就足够了:

@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 "";
    }

}
 类似资料:
  • 我需要将包含类型为Pair的对象的列表序列化为xml 首先,我创建了一个类PairList来保存对的列表,然后我创建了一个实际的类,它表示一对两个值,key和value。 然后,我尝试序列化它: 不幸的是,我遇到了一个异常:。欢迎任何关于如何避免此异常并序列化该类的想法。 如果我选择不序列化ttype和utype字段(通过将其设置为受保护或私有),则序列化有效。我不明白为什么它不想序列化类型字段。

  • 如何获取这个类的类型?对于上下文,我使用ModelMapper,我需要类类型T从S转换为T。 背景: 我已经尝试了N种方法,其中我放置了“//一些方法来获取类型”,但没有任何效果。例如: 或

  • 问题内容: 我有一个通用类,说: 在此类的方法内部,我想测试T的类型,例如: 我怎样才能做到这一点 ? 谢谢你的帮助 问题答案: 通常,由于类型擦除,您不能这样做。有关更多详细信息,请参见Angelika Langer的Java泛型常见问题解答 。 您 可以 做的是将a传递给构造函数,然后检查: 请注意,尽管如此,Java仍不允许将原语用于类型参数,因此实在不行。

  • 我有一个关于Java仿制药的问题。假设我有以下方法: 我如何用通配符<解释上面的类型转换?扩展U>?使用它与只使用有什么区别?

  • 我有一个时间字符串,它的模式是。我想将其转换为LocalTime对象。 嗯- 党卫军- SSS- 简单的例子: 我得到以下例外: java.time.format.DateTimeParseException:无法解析文本'03:02:111':无法从临时访问器获取LocalTime:{MicroOf秒钟=111000,MilliOf秒钟=111,NanoOf秒钟=111000000,秒分钟=2,

  • 问题内容: 我有一个类型T的泛型类,我想获得实例化时传递给该类的类型的名称。这是一个例子。 我已经逛了好几个小时,但似乎找不到任何方法。有人尝试过吗? 任何帮助是极大的赞赏。 谢谢 问题答案: 单纯的快速方法是不可能的。 可能的解决方法是: 这些限制取决于它仅适用于类的事实。 如果这是通用类型: 返回全名(包括名称空间): 这就是为什么func搜索字符的最后一次出现。 测试如下: 更新Swift