xstream转换xml时出错

xstream转换xml时出错

我的xml是这样的

`<?xml version="1.0" encoding="UTF-8"?> <MESSAGE>

 <HEADER>
     <MESSAGENAME>CheckRequest</MESSAGENAME>
     <TRANSACTIONID>20201120110748404</TRANSACTIONID>
     <REPLYSUBJECTNAME>PROD.Listen.DRYT1200</REPLYSUBJECTNAME>
     <INBOXNAME />
     <LISTENER>PEMListener</LISTENER>
 </HEADER>

<BODY> ​ <LINENAME>DRYT0100</LINENAME> ​ <LINE_RECIPE_LIST> ​ <LINE_RECIPE> ​ <RECIPEEVENTTYPE>Check</RECIPEEVENTTYPE> ​ <LINERECIPENAME>E495A1A2400A1</LINERECIPENAME> ​ <TIMEOUT_UNIT_LIST /> ​ <CIMOFF_UNIT_LIST /> ​ <UNIT_LIST> ​ <UNITNAME>DRYT0141</UNITNAME> ​ <UNITRECIPENAME>11</UNITRECIPENAME> ​ <RECIPEPARALIST> ​ <PARA> ​ <TRACELEVEL>M</TRACELEVEL> ​ <PARANAME>Recipe_Version</PARANAME> ​ <VALUETYPE>NUMBER</VALUETYPE> ​ <PARAVALUE>57.5A1B_NP_ETCH</PARAVALUE> ​ </PARA> ​ <PARA> ​ <TRACELEVEL>M</TRACELEVEL> ​ <PARANAME>LINE RECIPEID</PARANAME> ​ <VALUETYPE>NUMBER</VALUETYPE> ​ <PARAVALUE>0310</PARAVALUE> ​ </PARA> ​ </RECIPEPARALIST> ​ </UNIT_LIST> ​ </LINE_RECIPE> ​ </LINE_RECIPE_LIST> ​ <OPERATORID /> ​ <TRANSACTIONSTARTTIME>2020-11-20 11:07:49.107</TRANSACTIONSTARTTIME> ​ </BODY> </MESSAGE>`

 

我的class是这样的:

``

 package com.example.rvxmldemo.testmdoel;
 ​
 ​
 import com.thoughtworks.xstream.annotations.XStreamAlias;
 import com.thoughtworks.xstream.annotations.XStreamAsAttribute;
 import com.thoughtworks.xstream.annotations.XStreamImplicit;
 ​
 import java.util.ArrayList;
 import java.util.List;
 ​
 @XStreamAlias("MESSAGE")
 public class Message {
     @XStreamAlias("HEADER")
     @XStreamAsAttribute
     Header header;
 ​
     @XStreamAlias("BODY")
     @XStreamAsAttribute
     Body body;
 ​
     @XStreamAlias("RETURN")
     @XStreamAsAttribute
     Header.ReturnMessage Return;
 ​
     public Message() {
     }
 ​
 ​
     public Header getHeader() {
         return header;
     }
 ​
     public void setHeader(Header header) {
         this.header = header;
     }
 ​
     public Header.ReturnMessage getReturn() {
         return Return;
     }
 ​
     public void setReturn(Header.ReturnMessage aReturn) {
         Return = aReturn;
     }
 ​
     public Body getBody() {
         return body;
     }
 ​
     public void setBody(Body body) {
         this.body = body;
     }
 ​
     @XStreamAlias("HEADER")
     public class Header {
         @XStreamAlias("MESSAGENAME")
         @XStreamAsAttribute
         String messageName;
 ​
         @XStreamAlias("TRANSACTIONID")
         @XStreamAsAttribute
         String transactionID;
 ​
         @XStreamAlias("REPLYSUBJECTNAME")
         @XStreamAsAttribute
         String replySubjectName;
 ​
         @XStreamAlias("INBOXNAME")
         @XStreamAsAttribute
         String inboxName;
 ​
         @XStreamAlias("LISTENER")
         @XStreamAsAttribute
         String listener;
 ​
         public Header() {
         }
 ​
 ​
         @XStreamAlias("RETURN")
         public class ReturnMessage {
             @XStreamAlias("RETURNCODE")
             String returnCode;
             @XStreamAlias("RETURNMESSAGE")
             String returnMessage;
 ​
             public ReturnMessage() {
             }
 ​
             public String getReturnCode() {
                 return returnCode;
             }
 ​
             public void setReturnCode(String returnCode) {
                 this.returnCode = returnCode;
             }
 ​
             public String getReturnMessage() {
                 return returnMessage;
             }
 ​
             public void setReturnMessage(String returnMessage) {
                 this.returnMessage = returnMessage;
             }
         }
 ​
     }
 ​
 ​
     @XStreamAlias("BODY")
     public class Body {
 ​
         @XStreamAlias("LINENAME")
         @XStreamAsAttribute
         String lineName;
 ​
         @XStreamAlias("LINE_RECIPE_LIST")
         @XStreamImplicit(itemFieldName = "LINE_RECIPE")
         List<LineRecipe> LINE_RECIPE_LIST;
 ​
         @XStreamAlias("OPERATORID")
         @XStreamAsAttribute
         String operatorID;
 ​
         @XStreamAlias("TRANSACTIONSTARTTIME")
         @XStreamAsAttribute
         String transactionStartTime;
 ​
         public Body() {
             getLineRecipeList();
         }
 ​
         public String getLineName() {
             return lineName;
         }
 ​
         public void setLineName(String lineName) {
             this.lineName = lineName;
         }
 ​
         public List<LineRecipe> getLineRecipeList() {
             if (LINE_RECIPE_LIST == null) {
                 LINE_RECIPE_LIST = new ArrayList<>();
             }
             return LINE_RECIPE_LIST;
         }
 ​
         public void setLineRecipeList(List<LineRecipe> lineRecipeList) {
             this.LINE_RECIPE_LIST = lineRecipeList;
         }
 ​
         public String getOperatorID() {
             return operatorID;
         }
 ​
         public void setOperatorID(String operatorID) {
             this.operatorID = operatorID;
         }
 ​
         public String getTransactionStartTime() {
             return transactionStartTime;
         }
 ​
         public void setTransactionStartTime(String transactionStartTime) {
             this.transactionStartTime = transactionStartTime;
         }
     }
 ​
 ​
     @XStreamAlias("LINE_RECIPE")
     public static class LineRecipe {
         @XStreamAlias("RECIPEEVENTTYPE")
         String recipeEventType;
         @XStreamAlias("LINERECIPENAME")
         String lineRecipeName;
         @XStreamAlias("TIMEOUT_UNIT_LIST")
         String TIMEOUT_UNIT_LIST;
         @XStreamAlias("CIMOFF_UNIT_LIST")
         String CIMOFF_UNIT_LIST;
         @XStreamAlias("UNIT_LIST")
         String UNIT_LIST;
 ​
         public LineRecipe() {
 //            getUnitList();
         }
 ​
 ​
         public String getRecipeEventType() {
             return recipeEventType;
         }
 ​
         public void setRecipeEventType(String recipeEventType) {
             this.recipeEventType = recipeEventType;
         }
 ​
         public String getLineRecipeName() {
             return lineRecipeName;
         }
 ​
         public void setLineRecipeName(String lineRecipeName) {
             this.lineRecipeName = lineRecipeName;
         }
 ​
 //    public List<TimeOutUnit> getTimeOutUnits() {
 //        if (TIMEOUT_UNIT_LIST == null) {
 //            TIMEOUT_UNIT_LIST = new ArrayList<>();
 //        }
 //        return TIMEOUT_UNIT_LIST;
 //    }
 //
 //    public void setTimeOutUnits(List<TimeOutUnit> timeOutUnits) {
 //        this.TIMEOUT_UNIT_LIST = timeOutUnits;
 //    }
 //
 //    public List<CimoffUnit> getCimoffUnits() {
 //        if (CIMOFF_UNIT_LIST == null) {
 //            CIMOFF_UNIT_LIST = new ArrayList<>();
 //        }
 //        return CIMOFF_UNIT_LIST;
 //    }
 //
 //    public void setCimoffUnits(List<CimoffUnit> cimoffUnits) {
 //        this.CIMOFF_UNIT_LIST = cimoffUnits;
 //    }
 ​
 //        public List<Unit> getUnitList() {
 //            if (UNIT_LIST == null) {
 //                UNIT_LIST = new ArrayList<>();
 //            }
 //            return UNIT_LIST;
 //        }
 //
 //        public void setUnitList(List<Unit> unitList) {
 //            this.UNIT_LIST = unitList;
 //        }
 ​
         public String getTIMEOUT_UNIT_LIST() {
             return TIMEOUT_UNIT_LIST;
         }
 ​
         public void setTIMEOUT_UNIT_LIST(String TIMEOUT_UNIT_LIST) {
             this.TIMEOUT_UNIT_LIST = TIMEOUT_UNIT_LIST;
         }
 ​
         public String getCIMOFF_UNIT_LIST() {
             return CIMOFF_UNIT_LIST;
         }
 ​
         public void setCIMOFF_UNIT_LIST(String CIMOFF_UNIT_LIST) {
             this.CIMOFF_UNIT_LIST = CIMOFF_UNIT_LIST;
         }
 ​
         public String getUNIT_LIST() {
             return UNIT_LIST;
         }
 ​
         public void setUNIT_LIST(String UNIT_LIST) {
             this.UNIT_LIST = UNIT_LIST;
         }
     }
 }

 

我的测试类是这样的:

``

 package com.example.rvxmldemo.testmdoel;
 ​
 import com.thoughtworks.xstream.XStream;
 import com.thoughtworks.xstream.io.xml.DomDriver;
 ​
 import java.io.*;
 ​
 public class Test12 {
     public static void main(String[] args) {
         String xml = "F:\\xml\\message.xml";
         String s = readFile(xml);
         Message message = toBean(s, Message.class);
         System.out.println(message);
 ​
 ​
     }
 ​
     public static <T> T toBean(String xmlStr, Class<T> cls) {
         XStream xstream = new XStream(new DomDriver());
         xstream.setClassLoader(cls.getClassLoader());
         xstream.processAnnotations(cls);
         T obj = (T) xstream.fromXML(xmlStr);
         return obj;
     }
 ​
     /**
      * 一次性读取全部文件数据
      *
      * @param strFile
      * @return
      */
     public static String readFile(String strFile) {
         String s = "";
         try {
             InputStream is = new FileInputStream(strFile);
             int iAvail = is.available();
             byte[] bytes = new byte[iAvail];
             is.read(bytes);
             s = new String(bytes);
             is.close();
         } catch (Exception e) {
             e.printStackTrace();
         }
         return s;
     }
 }

 

启动之后报错:

 

` Security framework of XStream not explicitly initialized, using predefined black list on your own risk. Exception in thread "main" com.thoughtworks.xstream.converters.reflection.AbstractReflectionConverter$UnknownFieldException: No such field com.example.rvxmldemo.testmdoel.Message$LineRecipe.LINE_RECIPE ---- Debugging information ---- message : No such field com.example.rvxmldemo.testmdoel.Message$LineRecipe.LINE_RECIPE field : LINE_RECIPE class : com.example.rvxmldemo.testmdoel.Message$LineRecipe required-type : com.example.rvxmldemo.testmdoel.Message$LineRecipe converter-type : com.thoughtworks.xstream.converters.reflection.ReflectionConverter path : /MESSAGE/BODY/LINE_RECIPE_LIST/LINE_RECIPE class[1] : com.example.rvxmldemo.testmdoel.Message$Body required-type[1] : com.example.rvxmldemo.testmdoel.Message$Body class[2] : com.example.rvxmldemo.testmdoel.Message required-type[2] : com.example.rvxmldemo.testmdoel.Message

version : 1.4.14

at com.thoughtworks.xstream.converters.reflection.AbstractReflectionConverter.handleUnknownField(AbstractReflectionConverter.java:520) ​ at com.thoughtworks.xstream.converters.reflection.AbstractReflectionConverter.doUnmarshal(AbstractReflectionConverter.java:371) ​ at com.thoughtworks.xstream.converters.reflection.AbstractReflectionConverter.unmarshal(AbstractReflectionConverter.java:277) ​ at com.thoughtworks.xstream.core.TreeUnmarshaller.convert(TreeUnmarshaller.java:72) ​ at com.thoughtworks.xstream.core.AbstractReferenceUnmarshaller.convert(AbstractReferenceUnmarshaller.java:72) ​ at com.thoughtworks.xstream.core.TreeUnmarshaller.convertAnother(TreeUnmarshaller.java:66) ​ at com.thoughtworks.xstream.core.TreeUnmarshaller.convertAnother(TreeUnmarshaller.java:50) ​ at com.thoughtworks.xstream.converters.reflection.AbstractReflectionConverter.doUnmarshal(AbstractReflectionConverter.java:445) ​ at com.thoughtworks.xstream.converters.reflection.AbstractReflectionConverter.unmarshal(AbstractReflectionConverter.java:277) ​ at com.thoughtworks.xstream.core.TreeUnmarshaller.convert(TreeUnmarshaller.java:72) ​ at com.thoughtworks.xstream.core.AbstractReferenceUnmarshaller.convert(AbstractReferenceUnmarshaller.java:72) ​ at com.thoughtworks.xstream.core.TreeUnmarshaller.convertAnother(TreeUnmarshaller.java:66) ​ at com.thoughtworks.xstream.converters.reflection.AbstractReflectionConverter.unmarshallField(AbstractReflectionConverter.java:499) ​ at com.thoughtworks.xstream.converters.reflection.AbstractReflectionConverter.doUnmarshal(AbstractReflectionConverter.java:425) ​ at com.thoughtworks.xstream.converters.reflection.AbstractReflectionConverter.unmarshal(AbstractReflectionConverter.java:277) ​ at com.thoughtworks.xstream.core.TreeUnmarshaller.convert(TreeUnmarshaller.java:72) ​ at com.thoughtworks.xstream.core.AbstractReferenceUnmarshaller.convert(AbstractReferenceUnmarshaller.java:72) ​ at com.thoughtworks.xstream.core.TreeUnmarshaller.convertAnother(TreeUnmarshaller.java:66) ​ at com.thoughtworks.xstream.core.TreeUnmarshaller.convertAnother(TreeUnmarshaller.java:50) ​ at com.thoughtworks.xstream.core.TreeUnmarshaller.start(TreeUnmarshaller.java:134) ​ at com.thoughtworks.xstream.core.AbstractTreeMarshallingStrategy.unmarshal(AbstractTreeMarshallingStrategy.java:32) ​ at com.thoughtworks.xstream.XStream.unmarshal(XStream.java:1404) ​ at com.thoughtworks.xstream.XStream.unmarshal(XStream.java:1383) ​ at com.thoughtworks.xstream.XStream.fromXML(XStream.java:1268) ​ at com.thoughtworks.xstream.XStream.fromXML(XStream.java:1259) ​ at com.example.rvxmldemo.testmdoel.Test12.toBean(Test12.java:22) ​ at com.example.rvxmldemo.testmdoel.Test12.main(Test12.java:12) ​ Disconnected from the target VM, address: '127.0.0.1:52396', transport: 'socket'`

 

不知道是实体类哪里错了

查看全部
qq_41886200
离离原上草77
2020/11/25 18:53
  • java
  • 点赞
  • 收藏
  • 回答
    私信

1个回复