2013-10-30 8 views
0

편안한 웹 서비스를 처음 사용합니다. 저지 클라이언트를 통해 서버에 액세스하려고합니다. 하지만 나는 500 오류가 발생했습니다. 내가 뭘 하려는지 클라이언트 엔드를 통해 테이블 ​​이름을 제출하고 JSON으로 테이블 내용을 검색합니다. 누구든지 여기에서 오류를 찾으실 수 있습니까?저지 RESTful 서비스, 오류 500

이 내 클라이언트가

public JSONObject loadTable(String tablename) throws ClientProtocolException, IOException { 
    pathParams.add("tablename", tablename); 
    JSONObject jsontable = service.path("access").path("loadtable").queryParams(pathParams).get(JSONObject.class); 
    return jsontable; 
} 

@Path("/loadtable") 
@GET 
@Produces(MediaType.APPLICATION_JSON) 
@Consumes(MediaType.TEXT_PLAIN) 
public JSONObject loadTable(@QueryParam("tablename") String tablename) throws Exception { 
    List<Pricing> pricing = new ArrayList<Pricing>(); 
    try { 
     query = c.prepareStatement("select * from '" + tablename + "'"); 
     ResultSet ets_rs = query.executeQuery(); 

     while (ets_rs.next()) { 
      pricing.add(new Pricing(ets_rs.getString(1), ets_rs.getString(2), ets_rs.getString(3), ets_rs.getString(4), ets_rs.getString(5), ets_rs.getString(6))); 
     } 
     query.close(); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } finally { 
     if (c != null) { 
      c.close(); 
     } 
    } 
    JSONObject jsonTable = JsonConvert.getJsonFromPricing(pricing); 
    System.out.println(jsonTable); 
    return jsonTable; 
} 

서버 끝의 가격 클래스는 JSON으로 결과 집합 변환이 내 서버 종료된다 종료합니다.

이 스택 트레이스입니다 :

Exception in thread "AWT-EventQueue-0" com.sun.jersey.api.client.UniformInterfaceException: GET http://localhost:8080/ServerETS/resources/access/loadtable?tablename=prices returned a response status of 500 
    at com.sun.jersey.api.client.WebResource.handle(WebResource.java:563) 
    at com.sun.jersey.api.client.WebResource.get(WebResource.java:179) 
    at Link.ClientLink.loadTable(ClientLink.java:60) 
    at Interfaces.Pricing.loadTable(Pricing.java:112) 
    at Interfaces.Pricing.<init>(Pricing.java:32) 
    at Interfaces.MainMenu.panelPricing(MainMenu.java:1026) 
    at Interfaces.AdminData.btnAdminDataOKActionPerformed(AdminData.java:150) 
    at Interfaces.AdminData.access$000(AdminData.java:26) 
    at Interfaces.AdminData$1.actionPerformed(AdminData.java:70) 
    at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995) 
    at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318) 
    at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387) 
    at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242) 
    at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:236) 
    at java.awt.Component.processMouseEvent(Component.java:6288) 
    at javax.swing.JComponent.processMouseEvent(JComponent.java:3267) 
    at java.awt.Component.processEvent(Component.java:6053) 
    at java.awt.Container.processEvent(Container.java:2041) 
    at java.awt.Component.dispatchEventImpl(Component.java:4651) 
    at java.awt.Container.dispatchEventImpl(Container.java:2099) 
    at java.awt.Component.dispatchEvent(Component.java:4481) 
    at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4577) 
    at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4238) 
    at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4168) 
    at java.awt.Container.dispatchEventImpl(Container.java:2085) 
    at java.awt.Window.dispatchEventImpl(Window.java:2478) 
    at java.awt.Component.dispatchEvent(Component.java:4481) 
    at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:643) 
    at java.awt.EventQueue.access$000(EventQueue.java:84) 
    at java.awt.EventQueue$1.run(EventQueue.java:602) 
    at java.awt.EventQueue$1.run(EventQueue.java:600) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:87) 
    at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:98) 
    at java.awt.EventQueue$2.run(EventQueue.java:616) 
    at java.awt.EventQueue$2.run(EventQueue.java:614) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:87) 
    at java.awt.EventQueue.dispatchEvent(EventQueue.java:613) 
    at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269) 
    at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184) 
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174) 
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169) 
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161) 
    at java.awt.EventDispatchThread.run(EventDispatchThread.java:122) 

그리고 이것은 당신이 JSON 형식으로 요청 데이터를 전송하기 위해 노력하고 있기 때문에 글래스 피시 서버 로그

Caused by: com.sun.jersey.api.MessageException: A message body writer for Java class org.json.simple.JSONObject, and Java type class org.json.simple.JSONObject, and MIME media type application/json was not found 
    ... 33 more 
+0

자세한 내용을 포함하십시오. 스택 추적이란 무엇입니까? –

+0

서버 로그도 제공 할 수 있습니까? (HTTP 500의 원인을 설명하는 예외도 있어야합니다)? –

+0

@LutzHorn Stacktrace를 포함 시켰습니다. – Dimi

답변

0

다음과 같이

public String loadTable(String tablename) throws ClientProtocolException, IOException { 
    pathParams.add("tablename", tablename); 
    ClientResponse response = service.path("access").path("loadtable").queryParams(pathParams).type(MediaType.APPLICATION_JSON).get(ClientResponse.class); 
    String responseString = response.getEntity(String.class); 
    return responseString; 
} 

서버의 끝을 다음과 같이

@Path("/loadtable") 
@GET 
@Produces(MediaType.APPLICATION_JSON) 
public List<Pricing> loadTable(@QueryParam("tablename") String tablename) throws Exception { 
    List<Pricing> pricing = new ArrayList<Pricing>(); 
    try { 
     query = c.prepareStatement("select * from " + tablename); 
     ResultSet ets_rs = query.executeQuery(); 

     while (ets_rs.next()) { 
      pricing.add(new Pricing(ets_rs.getString(1), ets_rs.getString(2), ets_rs.getString(3), ets_rs.getString(4), ets_rs.getString(5), ets_rs.getString(6))); 
     } 
     query.close(); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } finally { 
     if (c != null) { 
      c.close(); 
     } 
    } 
    return pricing; 
} 

을 클라이언트 끝 변경 및 JAXB @XmlRootElement와 가격을 주석 ... 마법처럼 일! 의견을 주셔서 감사합니다 @ LutzHorn!

0

, 당신은 MIME 유형을 수정할 수 있습니다 JSON 유형의 서버 사용 데이터 유형 :

@Produces(MediaType.APPLICATION_JSON) 
@Consumes(MediaType.APPLICATION_JSON) 
+0

@ tonga ... 사실 내 입력은 JSON 형식이 아닙니다. 그것은 일반 텍스트입니다. 내 출력물 만 JSON입니다. – Dimi

2

저지가 012 응답을 일련화할 수 없습니다. JSON에이 같은 귀하의 방법을 변경 : JAXB @XmlRootElement

@GET 
@Produces(MediaType.APPLICATION_JSON) 
public Response loadTable(@QueryParam("tablename") String tablename) throws Exception { 
    // ... 
    Pricing pricing = ... 
    return Response.ok(pricing).build(); 
} 

주석 Pricing 및하자 JAXB는 JSON으로 변환을 수행.

+0

빠른 답장을 보내 주셔서 감사합니다. 하지만 여전히 같은 오류가 발생합니다. "loadtable"메소드 헤더 아래에 s.out을 추가하면 어떤 결과도 나타나지 않습니다. 그래서 나는 클라이언트 측 메소드 호출이나 서버 측 "loadtable"메소드 헤더에 오류가 있다고 생각합니다. – Dimi