代码之家  ›  专栏  ›  技术社区  ›  Black

xstream。fromXML返回一个类

  •  1
  • Black  · 技术社区  · 7 年前

    使用XStream 1.2.2

    XML文档:

    <?xml version="1.0" encoding="ISO-8859-1"?>
    <Document xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" protocol="OCI" xmlns="C">  
    <sessionId xmlns="">192.168.1.19,299365097130,1517884537</sessionId>  
      <command xsi:type="AuthenticationRequest" xmlns="">    
        <userId>me@somewhere.com</userId>  
      </command>
    </Document>
    

    我正试图解析为 Document ;

    public class Document {
        private String sessionId;
        public Command command;
        public Command getCommand() {
            return this.command;
        }
        public void setCommand(Command command) {
            this.command = command;
        }
        public String getSessionId() {
            return sessionId;
        }
        public void setSessionId(String sessionId) {
            this.sessionId = sessionId;
        }
    }
    

    分析代码为:

        XStream xstream = new XStream();
        xstream.alias("Document", Document.class);
        xstream.alias("sessionId", String.class);
        xstream.alias("command", Command.class);
        xstream.alias("userId", String.class);
    
        Document doc = (Document) xstream.fromXML(theInput, Document.class);
    

    但这会引发:

    Java语言lang.ClassCastException:java。lang.类不能转换为com。我的公司。ocip。服务器模型文件

    因为返回的对象来自 fromXml 类型为: Class<com.mycompany.ocip.server.model.Document>

    我不应该期望它返回一个 com.mycompany.ocip.server.model.Document 例子

    1 回复  |  直到 7 年前
        1
  •  3
  •   Robby Cornelissen    7 年前

    这需要:

    Document doc = (Document) xstream.fromXML(theInput);
    

    如果传入第二个参数,XStream将尝试用XML中的值填充该参数。由于在代码中传递的是类对象,所以XStream将尝试填充类对象并返回它。

    这个 JavaDoc 有详细信息。