Как сопоставить XML для Pojo класса с шаблоном отдыха, используя Spring 3? - PullRequest
2 голосов
/ 28 февраля 2012

У меня тоже проблемы: 1: отладка restTemplate, 2: отображение xml на pojo.

вот мой код Pojo:

@XmlRootElement(name = "parent")
public class Parent {

private User user;

public Parent(){        
}

//getter setter     
}

еще одно Pojo

@XmlRootElement(name = "user")
public class User {

public User(){      
}
private long id;
    private String name;
    private Date registrationDate;  
}

У меня есть другой веб-сервис, который возвращает данные XML как:

<parent>
<user id="23" name="name">
<registrationdate>2012-02-27T13:08:31.771-05:00</registrationdate>
</user>
</parent>

Я использую Spring 3 и обновляю шаблон (в моем classpath у меня есть jaxb-api и jaxb-impl): в моем контексте appilacation у меня есть:

<bean id="restTemplate" class="org.springframework.web.client.RestTemplate"/>

и в моем слое обслуживания у меня есть:

@Service
public class ParentServiceI implements ParentService{

Logger logger = Logger.getLogger(this.getClass());  

@Autowired
private RestTemplate restTemplate;

public Parent getMoreInfo() {
    logger.info("getting info");
    Parent p = restTemplate.getForObject("http://localhost:3128/dadad.xml", Parent.class);
    logger.info(p.toString());      
    return p;
}}

моя первая проблема: Когда я запустил этот код, у меня, конечно, были проблемы с отображением, но я не смог отладить его, я не смог увидеть любой журнал ошибок, любое исключение, в своей консоли я получил только это:

09:31:50,503  INFO 959993440@qtp159257116-0 ParentServiceI :64 - getting info
09:31:50,670 DEBUG 959993440@qtp-159257116-0 client.RestTemplate:78 - Created GET request for "http://localhost:3128/dadad.xml"
09:31:50,971 DEBUG 959993440@qtp-159257116-0 client.RestTemplate:520 - Setting request Accept header to [application/xml, text/xml, application/*+xml, application/json]
09:31:58,762 DEBUG 959993440@qtp-159257116-0 client.RestTemplate:465 - GET request for "http://localhost:3128/dadad.xml" resulted in 200 (OK)
09:31:58,764 DEBUG 959993440@qtp-159257116-0 client.RestTemplate:78 - Reading [com.mypackage.Parent] as "text/xml" using [org.springframework.http.converter.xml.Jaxb2RootElementHttpMessageConverter@7d6d4e3e]

И это все. без ошибок, код просто застрял там. я получаю первое сообщение журнала "получение информации", я не получаю второе сообщение журнала как я могу отладить это?

моя вторая проблема: после правильной настройки pojo я получил некоторый результат:

09:31:50,503  INFO 959993440@qtp-159257116-0 ParentServiceI :64 - getting info
09:31:50,670 DEBUG 959993440@qtp-159257116-0 client.RestTemplate:78 - Created GET request for "http://localhost:3128/dadad.xml"
09:31:50,971 DEBUG 959993440@qtp-159257116-0 client.RestTemplate:520 - Setting request Accept header to [application/xml, text/xml, application/*+xml, application/json]
09:31:58,762 DEBUG 959993440@qtp-159257116-0 client.RestTemplate:465 - GET request for "http://localhost:3128/dadad.xml" resulted in 200 (OK)
09:31:58,764 DEBUG 959993440@qtp-159257116-0 client.RestTemplate:78 - Reading [com.mypackage.Parent] as "text/xml" using [org.springframework.http.converter.xml.Jaxb2RootElementHttpMessageConverter@7d6d4e3e]
09:31:59,337  INFO 959993440@qtp-159257116-0 serviceI.EquipmentServiceI:83 - Parent [user=User [id=0, name=null, registrationDate=Mon Feb 27 13:08:31 EST 2012]]

все хорошо, кроме сопоставления? как я могу это исправить?

Спасибо

Ответы [ 2 ]

4 голосов
/ 01 марта 2012

Я не узнал, как решить мою первую версию.

Чтобы отобразить этот атрибут файла XML, мне нужно только добавить аннотацию на получателе как

@XmlRootElement(name = "user")
public class User {

public User(){      
}
private long id;
    private String name;
    private Date registrationDate; 

@XmlAttribute(name="name")
    public String getName() {
        return name;
    }

}
2 голосов
/ 01 марта 2012

В вашем файле контекста приложения добавьте следующую запись, чтобы использовать jaxb для маршаллинга / демаршаллинга

<bean id="jaxb2Marshaller" class="org.springframework.oxm.jaxb.Jaxb2Marshaller">
    <property name="classesToBeBound">
        <list>
            <value>your.package.name.Parent</value>
            <value>your.package.name.User</value>
        </list>
    </property>
</bean>

Также вы должны указать шаблону отдыха использовать этот маршаллер, установив свойство messageConverters - как это [пример кода скопирован с здесь ]:

<bean id="restTemplate" class="org.springframework.web.client.RestTemplate">
    <property name="messageConverters">
    <list>
      <bean id="messageConverter"
            class="org.springframework.http.converter.xml.MarshallingHttpMessageConverter">
        <property name="marshaller" ref="jaxb2Marshaller" />
        <property name="unmarshaller" ref="jaxb2Marshaller" />
      </bean>
    </list>
    </property>
</bean>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...