2015-01-20 3 views
4

Eclipse로 동적 웹 응용 프로그램을 개발 중입니다. JDBC를 사용하는 'Data Access Object'(= DAO)라는 클래스를 통해 연결된 MySQL 데이터베이스를 사용하고 있습니다. 이 데이터베이스에 항목을 작성하려고합니다. 기능이 준비되었습니다. 준비가되면 나는 테스트를 마쳤고 OK. 동일한 애플리케이션에서 Java Jersey의 RESTful WebService를 구현했습니다. 잘 작동하고 서비스를 호출 할 수 있으며 원하는 정보를 반환합니다. 하지만 지금 내 질문에 :Java Jersey PUT 방법 및 작업 클라이언트

어떻게 XML을 포함하는 String을 보낼 수 있습니까? 쿼리를 작성하고 실행하려면 String을 WebMethod에서 구문 분석해야합니다. 다음과 같이

내 WebService에 보이는 :

import java.io.BufferedReader; 
import java.io.IOException; 
import java.io.InputStream; 
import java.io.InputStreamReader; 

import javax.ws.rs.Consumes; 
import javax.ws.rs.PUT; 
import javax.ws.rs.Path; 
import javax.ws.rs.core.MediaType; 

@Path("/input") 
public class Input { 
    //DAO instance to have connection to the database. 
    //Not used yet. 
    //private DAO dao = new DAO(); 

    @PUT 
    @Consumes(MediaType.TEXT_XML) 
    @Path("/result") 
    public void putIntoDAO(InputStream xml) { 
     String line = ""; 
     StringBuilder sb = new StringBuilder(); 
     try { 
      BufferedReader br = new BufferedReader(new InputStreamReader(xml)); 
      while ((line = br.readLine()) != null) { 
       sb.append(line); 
      } 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
     System.out.println(sb.toString()); 
    } 
} 

당신은 내가 콘솔에 들어오는 스트림을 인쇄하려고시피. 나는 가장 중요한 일을 반복 :

  • 내가 XML을 구문 분석하는 방법을 알고있다.
  • DAO가 제대로 작동한다는 것을 알고 있습니다.
  • 내 WebService도 잘 작동합니다.

내가 알고 싶습니다 무엇 :

  • 가 어떻게 내 WebService에에 XML 문자열을 보내려면 어떻게합니까?
  • PUT 방식으로이 문자열에 액세스하려면 어떻게해야합니까?

감사합니다. 저를 도와 주셔서 감사합니다. 모든 시도조차 감사드립니다.

종류는 내 PUT-방법이 String에 액세스하려면 어떻게

L.

답변

2

에게 안부?

당신은 단순히 유형 String의 인수를하는 방법을 코딩 할 수 있습니다 저지 그렇게 들어오는 XML 요청에서이 매핑합니다

:

@PUT 
@Consumes(MediaType.TEXT_XML) 
@Path("/result") 
public void putIntoDAO(String xml) { 
    // ... 
} 

작동 경우, 전체 요청 본문이 포함 된 문자열 .

WebService에 XML 문자열을 보내려면 어떻게해야합니까?

이것은 HTTP를 통해 통신하는 서비스 일 수있는 요청을 서비스에 보내는 용도에 따라 다릅니다. 난 당신이 자바를 사용하고 저지 고수하고 가정합니다, 그래서 하나의 옵션은 다음과 같은 방법으로 저지 클라이언트를 사용할 수 있습니다 :

Client client = Client.create(); 
WebResource webResource = client.resource("http://localhost:8080/input/result"); 
String input = "<xml></xml>"; 
ClientResponse response = webResource 
    .type("application/xml") 
    .put(ClientResponse.class, input); 

이 이상 the Jersey Client documentation를 참조하십시오.

+0

당신에게 @Ross 터너 감사합니다! 그것은 마침내 일하고있다! 나는 또한 잘 작동하는 [Apache HttpComponents] (http://hc.apache.org/)를 시도했다. 당신의 대답 아래에 예를 게시 할 것입니다. – silenum

2

로스 터너의 답변은 정확하고 올바르게 작동합니다. 다음은 Apache HttpComponents을 사용하는 옵션입니다.

import org.apache.http.client.HttpClient; 
import org.apache.http.client.methods.HttpPut; 
import org.apache.http.entity.StringEntity; 
import org.apache.http.impl.client.DefaultHttpClient; 

public class Runner { 

    public static void main(String[] args) { 
     try { 

      HttpClient httpClient = new DefaultHttpClient(); 
      HttpPut putRequest = new HttpPut("http://localhost:8080/HelloFromJersey/input/result"); 

      StringEntity input = new StringEntity("Hello, this is a message from your put client!"); 
      input.setContentType("text/xml"); 
      putRequest.setEntity(input); 

      httpClient.execute(putRequest); 
      httpClient.getConnectionManager().shutdown(); 


     } catch (Exception ex) { 
      ex.printStackTrace(); 
     } 
    } 
} 

서버 인쇄 :

Hello, this is a message from your put client! 
관련 문제