2014-09-13 5 views
0

У меня есть общий класс ответа, который используется для любого типа возврата в веб-службах весны mvc. Основываясь на необходимости, я устанавливаю объекты на общий ответ. Я ожидаю, что клиент получит ответ в соответствии с приведенной ниже структурой.Проблема с Java-маршаллингом Java

Но всегда есть исключения при одновременном отмене класса Response весной MVC. Я получаю ниже ошибки:

org.springframework.integration.transformer.MessageTransformationException: org.springframework.integration.MessageHandlingException: org.w3c.dom.DOMException: INVALID_CHARACTER_ERR: указан неверный или незаконна XML характер.

См. Ниже приведенные классы Java. Может ли кто-нибудь помочь мне, где проблема. Является ли проблема из-за множественности XMLRootElement в каждом классе?

Response.java 

@XmlRootElement 
@XmlAccessorType(XmlAccessType.FIELD) 
@XmlType(name = "Response", propOrder = { "value", "businessMessages" }) 
public class Response<T> implements Serializable { 

    /** 
    * Generated serial version UID 
    */ 
    private static final long serialVersionUID = -2079538531780930420L; 

    /** 
    * The value. 
    */ 
    @XmlElement(name = "Value") 
    private T value; 

    /** 
    * The business messages. 
    */ 
    @XmlElementWrapper(name = "BusinessMessages") 
    @XmlElement(name = "BusinessMessage") 
    private List<BusinessMessage> businessMessages; 


    public List<BusinessMessage> getBusinessMessages() {   
     return this.businessMessages; 
    } 

    public T getValue() { 
     return this.value; 
    } 


    public void setBusinessMessages(List<BusinessMessage> arg0) { 
     this.businessMessages = arg0;  
    } 

    public void setValue(T arg0) { 
     this.value = arg0; 

    } 
} 

BusinessMessage.java 

@XmlRootElement 
@XmlType(name = "BusinessMessage", propOrder = {"mibCode", "parameters", "severity"}) 
@XmlAccessorType(XmlAccessType.FIELD) 
public class BusinessMessage implements Serializable, Cloneable { 
    private static final long serialVersionUID = 1L; 

    @XmlElement(name = "MibCode") 
    private String mibCode; 

    @XmlElement(name = "Severity") 
    private BusinessMessageServerityEnum severity; 

    @XmlElementWrapper(name = "Parameters") 
    @XmlElement(name = "Parameter") 
    private List<String> parameters; 

// getter and setter ommited 
} 

класс Response, который установлен в ответ:

@XmlAccessorType(XmlAccessType.FIELD) 
@XmlType(name = "", propOrder = { 
    "messageId" 
}) 
@XmlRootElement(name = "GetPrelogonInfoResponse") 
public class GetPrelogonInfoResponse implements Serializable { 

    /** 
    * Serial version identifier generated 
    */ 
    private static final long serialVersionUID = -3109695678881152603L; 

    @XmlElement(name = "MessageId", required = true) 
    protected String messageId; 
// getter and setter ommited 
} 
+0

сообщение звучит так, как если данные XML были повреждены. «Недопустимый или незаконный символ XML» является довольно низкоуровневым, например, запрещенный ASCII управляющий символ (код <32), встречающийся в XML. Возможно, «другая сторона» (та, которая отправляет ответ) является неправильной. – laune

ответ

0

Я наконец-то нашел причину. Проблема заключалась в параметре «name» в @xmltype.

Я изменил аннотации XML ниже и отлично работал.

Response.java

@XmlRootElement(name = "Response") 
@XmlAccessorType(XmlAccessType.FIELD) 
@XmlType(name = "", propOrder = { "value", "businessMessages" }) 

BusinessMessage.java

@XmlRootElement(name = "BusinessMessage") 
@XmlType(name = "", propOrder = {"mibCode", "parameters", "severity"}) 
@XmlAccessorType(XmlAccessType.FIELD)