2014-07-21 2 views
0

Jaxb/Jersey를 사용하는 작은 tomcat 서블릿이 있습니다. 게시물 처리기는 다른 개체가 들어있는 개체를 반환합니다. 결과가 호출자에게 돌아 오면 포함 된 객체는 서블릿에서 null이 아니더라도 mosly null입니다.Jaxb/Jersey 서블릿 데이터가 올바르게 반환되지 않습니다.

- 서블릿 -.

@POST 
@Consumes(MediaType.APPLICATION_XML) 
@Produces(MediaType.APPLICATION_XML) 
public Response postPlan(JAXBElement<String> mxml) throws IOException { 
    iMetrix metrix_MIS = Metrix_MIS_Implementation.getInstance(); 
    iMetrix_GeneratePlan_Response result = metrix_MIS.generatePlan(mxml.getValue()); 

    PlanData data = new PlanData(); 
    data.setJunk("Testing Junk"); 
    data.setGuid(result.getProjectID()); 
    data.setLog((Metrix_Log_Implementation) result.getLog()); 
    InputStream planStream = result.getPlanZipStream(); 
    if (planStream != null) { 
     data.setPlanXML(IOUtils.readFully(planStream, -1, true)); 
    } 

    result.getLog().dump(System.out); 

    return Response.ok(data).build(); 
} 

의 getLog 데이터의 무리를 app--

 Client client = ClientBuilder.newClient(); 
    WebTarget web = client.target(url); 
    Entity<String> entity = Entity.entity(mxmlProjectString, MediaType.APPLICATION_XML_TYPE); 
    Response resp = web.request(MediaType.APPLICATION_XML_TYPE).post(entity); 
    int status = resp.getStatus(); 
    System.out.println(status + "-" + resp.getStatusInfo().toString()); 
    System.out.println(resp.toString()); 
    System.out.println(resp.readEntity(String.class)); 

서블릿 인쇄를 --Calling()() 라인을 덤프.

그래서
200-OK 
InboundJaxrsResponse{ClientResponse{method=POST, uri=http://192.168.187.128:8080/MetrixServer/rest/Plan/v1, status=200, reason=OK}} 
<?xml version="1.0" encoding="UTF-8" standalone="yes"?><planData><junk>Testing Junk</junk><log/></planData> 

, 내가 무엇을 놓치고 : 발신자는 빈 로그 객체를 얻는다?

PlanData입니다

@XmlRootElement 
public class PlanData { 
    private String    guid; 
    private byte[]    planXML; 
    private Metrix_Log_Implementation log; 
    private String    junk; 
... getters/setters left out... 

Metrix_Log_Implementation :

@XmlRootElement(name = "MetrixLog") 
public class Metrix_Log_Implementation implements iMetrix_Log { 
... stuff... 
    @XmlRootElement(name = "LogLine") 
    private static class Metrix_LogLine_Implementation implements iMetrix_LogLine { 
    private eLogLineType m_type; 
    private String  m_message; 
    private String  m_MISID; 
... more stuff ... 

하나 기이는 개인 내부 클래스 및 ENUM의 사용이다. 그래도 작동하지 않아야합니까?

+0

중첩 된 클래스를 모두 주석 처리하고 로그 항목을 포함하는 응답을받을 수 있는지 확인하기 위해 열거 형을 주석 처리합니다 ... 이러한 객체에 일부 정크 값을 추가하여 해당 객체가 입력에 포함될 수 있습니다. 문제가 어디에 있는지 알았 으면 거기에서 갈 수 있습니다. – dimoniy

+0

그게 내가 피하기를 바랬던 것입니다. 왜냐하면 많은 다른 클래스들이 이것을 사용하기 때문입니다. 다른 것을 깨뜨릴 가능성이 너무 많습니다. 아주 간단한 데이터 보관 클래스 집합을 만들고 데이터를 복사하는 것을 끝 냈습니다. XML에서 /로 변환 된 더 간단한 클래스. – CasaDelGato

답변

0

반 복합체 구조의 어느 부분에서 문제가 발생했는지 정확히 알 수 없습니다. 어떤 종류의 오류 메시지가 어딘가에서 생성 되었다면 좋을 것입니다. 방금 ​​전송할 간단한 데이터 클래스를 작성하고 양쪽 끝의 더 복잡한 클래스간에 데이터를 복사했습니다.

관련 문제