2015-11-15 4 views
1

Я новичок в веб-сервисах и в настоящее время пытаюсь настроить Restlet на Apache Karaf. My Core bundle запускает компонент с протоколом HTTP. And Port: 8081.Не получать данные в ответ на JAXBRepresentation в restlet

Я создал компонент, в котором используется HTTP-протокол и номер порта, настроенный через свойство.

Приложения прилагаются по умолчанию в качестве хоста

wsComponent.getDefaultHost().attach(restletApp.getURI(),restletApp); 

В выше функция getURI возвращает URL, к которому приложение прилагается.

Я пытаюсь использовать JaxbRepresentation, чтобы получить детали. Класс ресурсов сервера выглядит следующим образом:

@Get 
public Representation getAllUsers() 
{ 
    List<MyUser> allUsers = MyFactory.getInstance().getAllUsers(); 
    MyUserListXML userListXML = new MyUserListXML(MyUserConverter.convertMyUserList(allUsers)); 
    JaxbRepresentation<MyUserListXML> userReps = new JaxbRepresentation<MyUserListXML>(userListXML); 
    userReps.setFormattedOutput(true); 
    return userReps; 
} 

MyUserListXML.java:

@XmlAccessorType(XmlAccessType.FIELD) 
@XmlType(propOrder={"user"}) 
@XmlRootElement(name="myUsers") 
public class MyUserListXML implements Serializable 
{ 

    private static final long serialVersionUID = 1L; 
    @XmlElement(name="user") 
    private List<MyUserXML> userList; 

    public MyUserListXML() 
    { 
     // Default Constructor 
    } 

    /** 
    * @param userList 
    */ 
    public MyUserListXML(List<MyUserXML> userList) 
    { 
     this.userList = userList; 
    } 

    /** 
    * @return the userList 
    */ 
    public List<MyUserXML> getUserList() 
    { 
     return userList; 
    } 

    /** 
    * @param userList the userList to set 
    */ 
    public void setUserList(List<MyUserXML> userList) 
    { 
     this.userList = userList; 
    } 
} 

MyUserXML.java

@XmlAccessorType(XmlAccessType.FIELD) 
@XmlType(propOrder = {"id","userName","status","displayName","email"}) 
@XmlRootElement(name = "esmfUser") 
public class MyUserXML implements Serializable 
{ 

    private static final long serialVersionUID = 1L; 

    @XmlElement(name= "id", required=true,type=Integer.class) 
    private Integer userId; 
    @XmlElement(required=true) 
    private String userName; 
    @XmlElement(name="status",required=true) 
    private String userStatus; 
    @XmlElement(required=true) 
    private String displayName; 
    @XmlElement(required=true) 
    private String email; 

    public MyUserXML() 
    { 
     // default constructor. 
    } 

    /** 
    * @param userId 
    * @param userName 
    * @param userStatus 
    * @param displayName 
    * @param email 
    */ 
    public MyUserXML(Integer userId, String userName, String userStatus, String displayName, String email) 
    { 
     this.userId = userId; 
     this.userName = userName; 
     this.userStatus = userStatus; 
     this.displayName = displayName; 
     this.email = email; 
    } 

    /** 
    * @return the userId 
    */ 
    public Integer getUserId() 
    { 
     return userId; 
    } 

    /** 
    * @param userId the userId to set 
    */ 
    public void setUserId(Integer userId) 
    { 
     this.userId = userId; 
    } 

    /** 
    * @return the userName 
    */ 
    public String getUserName() 
    { 
     return userName; 
    } 

    /** 
    * @param userName the userName to set 
    */ 
    public void setUserName(String userName) 
    { 
     this.userName = userName; 
    } 

    /** 
    * @return the userStatus 
    */ 
    public String getUserStatus() 
    { 
     return userStatus; 
    } 

    /** 
    * @param userStatus the userStatus to set 
    */ 
    public void setUserStatus(String userStatus) 
    { 
     this.userStatus = userStatus; 
    } 

    /** 
    * @return the displayName 
    */ 
    public String getDisplayName() 
    { 
     return displayName; 
    } 

    /** 
    * @param displayName the displayName to set 
    */ 
    public void setDisplayName(String displayName) 
    { 
     this.displayName = displayName; 
    } 

    /** 
    * @return the email 
    */ 
    public String getEmail() 
    { 
     return email; 
    } 

    /** 
    * @param email the email to set 
    */ 
    public void setEmail(String email) 
    { 
     this.email = email; 
    } 

} 

При тестировании с помощью SoapUI я получаю следующий запрос и ответ

Запрос:

GET http://localhost:8081/ws/users HTTP/1.1 
Accept-Encoding: gzip,deflate 
Host: localhost:8081 
Connection: Keep-Alive 
User-Agent: Apache-HttpClient/4.1.1 (java 1.5) 

Ответ:

HTTP/1.1 200 OK 
Content-encoding: gzip, zip, deflate 
Server: Restlet-Framework/2.3.5 
Date: Sun, 15 Nov 2015 09:29:31 GMT 
Transfer-encoding: chunked 
Content-type: application/xml; charset=UTF-8 
Vary: Accept-Charset, Accept-Encoding, Accept-Language, Accept 
Accept-ranges: bytes 

Я не знаю, почему я не получаю данные XML из. Может ли кто-нибудь помочь мне или вести меня, что я делаю неправильно.

Restlet версия: 2.3.5

ответ

0

Я был в состоянии решить эту проблему.

Я создал класс ObjectFactory, но изменил его имя. Из-за этого JaxbContext не смог найти класс ObjectFactory. И поскольку я использую рестайл в Osgi и еще не могу понять, как заставить Restlet использовать службу Osgi Log Service, не было сообщений об ошибках от restlet.

0

Что касается проблемы с JaxB, вы должны хотя бы увидеть трассировку журнала предупреждений и, вероятно, исключение IOException. Я рассмотрю созданный вами вопрос (https://github.com/restlet/restlet-framework-java/issues/1166). Если вы хотите перечислить все следы журнала из среды Restlet и фактически из любой другой библиотеки, которую вы включили в свой проект, и которые не полагаются на OSGi LogService, вы должны настроить журналы в соответствии с требованиями каждой библиотеки (JUL , Log4j, slf4j и т. Д.). Поскольку контейнер OSGi - это в основном JVM, нет необходимости настраивать каждый регистратор. Что касается Restlet Framework, вы можете прочитать эту страницу: http://restlet.com/technical-resources/restlet-framework/guide/2.3/editions/jse/logging Некоторые технологии, такие как slf4j, помогают объединять различные системы журналов. Если вы захотите, вы сможете влить все журналы в OSGi LogService.

 Смежные вопросы

  • Нет связанных вопросов^_^