2016-08-25 10 views
0

オブジェクトをXML表記でアンマーシャリングしようとすると、ClassCastExceptionが発生します。JAXBを使用してInputStreamをアンマーシャリングする方法は?

私のデスクトップクライアントは、適切にフォーマットされ、検証されたリストを返すRESTfulサービスを呼び出します。

例外を出してくれる方法は次のとおりです。

public class DecodeXML { 

    JAXBContext jaxbContext; 
    Unmarshaller jaxbUnmarshaller; 

    public Agent convertXmlToAgent(InputStreamReader inputStreamReader) { 
    //  XStream xstream = new XStream(); 
    //  xstream.processAnnotations(Agent.class); 
    //  xstream.processAnnotations(FtpConnection.class); 
    //  xstream.processAnnotations(SmtpConnection.class); 
    //  xstream.processAnnotations(SqlConnection.class); 
    // 
    //  return (Agent) xstream.fromXML(inputStreamReader); 


     try { 
      jaxbContext = JAXBContext.newInstance(Agent.class); 
      jaxbUnmarshaller = jaxbContext.createUnmarshaller(); 
      jaxbUnmarshaller.unmarshal(inputStreamReader); 
     } catch (JAXBException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 

     return (Agent) jaxbUnmarshaller; 
    } 
} 

コメントアウトセクションでは、私から動くよ旧実装です。

Agent POJOが、ここで私を見ていないです何

@XmlRootElement (name = "agent") 
@XmlAccessorType(XmlAccessType.NONE) 
public class Agent extends BasePojo { 

    private static final long serialVersionUID = 1L; 

    @XmlElement(name = "description") 
    private String description; 

    @XmlElement(name = "agentId") 
    private String agentId; 

    @XmlElement(name = "ftpConnection") 
    private FtpConnection ftpConnection; 

    @XmlElement(name = "smtpConnection") 
    private SmtpConnection smtpConnection; 

    @XmlElement(name = "sqlConnection") 
    private SqlConnection sqlConnection; 

    @XmlElement(name = "pollIntervall") 
    private Integer pollInterval; 

    @XmlElement(name = "lastExecutionDate") 
    private Date lastExecutionDate; 
    // getters and setters 

のですか?

答えて

2

さて、あなたのコードは

return (Agent) jaxbUnmarshaller; 

アンマーシャラーは、エージェントではありません。 XMLを解析してエージェントを生成できるのはオブジェクトです。

あなたは

return (Agent) jaxbUnmarshaller.unmarshal(inputStreamReader); 

をしたい私はあなたが例外のスタックトレースを投稿していなかったことに気づきます。それはおそらくあなたがそれを重要だとは思わなかったという印です。しかし、それはあなたの最大の間違いです。注意深く読むと、コードのどの行が例外の原因であるかを正確に示していることがわかります。

関連する問題