Java-Tools verwenden,
wscompile for RPC
wsimport for Document
etc..
Ich kann WSDL verwenden, um die für den Webdienst SOAP erforderlichen Stubs und Klassen zu generieren.
Ich habe jedoch keine Ahnung, wie ich dasselbe in REST tun kann. Wie kann ich die Java-Klassen erhalten, die für den Zugriff auf den REST - Webdienst erforderlich sind? Wie kann ich den Dienst trotzdem erreichen?
Kann mir jemand den Weg zeigen?
Wie andere bereits gesagt haben, können Sie dies mit der untergeordneten HTTP-API tun, oder Sie können die übergeordneten JAXRS-APIs verwenden, um einen Dienst als JSON zu verwenden. Zum Beispiel:
Client client = ClientBuilder.newClient();
WebTarget target = client.target("http://Host:8080/context/rest/method");
JsonArray response = target.request(MediaType.APPLICATION_JSON).get(JsonArray.class);
Arbeitsbeispiel Try this :)
package restclient;
import Java.io.BufferedReader;
import Java.io.InputStreamReader;
import Java.net.HttpURLConnection;
import Java.net.URL;
public class NetClientGet {
public static void main(String[] args) {
try {
URL url = new URL("http://localhost:3002/RestWebserviceDemo/rest/json/product/dynamicData?size=5");//your url i.e fetch data from .
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setRequestMethod("GET");
conn.setRequestProperty("Accept", "application/json");
if (conn.getResponseCode() != 200) {
throw new RuntimeException("Failed : HTTP Error code : "
+ conn.getResponseCode());
}
InputStreamReader in = new InputStreamReader(conn.getInputStream());
BufferedReader br = new BufferedReader(in);
String output;
while ((output = br.readLine()) != null) {
System.out.println(output);
}
conn.disconnect();
} catch (Exception e) {
System.out.println("Exception in NetClientGet:- " + e);
}
}
}
Stellen Sie einfach eine http-Anforderung mit der richtigen Abfragezeichenfolge oder den Anforderungshauptteil an die erforderliche URL.
Sie könnten beispielsweise Java.net.HttpURLConnection
verwenden und dann über connection.getInputStream()
verbrauchen und dann Ihre Objekte überdecken.
Im Frühling gibt es eine restTemplate
, die das alles etwas einfacher macht.
Wenn Sie auch den XML-String konvertieren müssen, der als Antwort auf den Serviceaufruf geliefert wird, können Sie ein X-Objekt wie folgt verwenden:
import Java.io.BufferedReader;
import Java.io.IOException;
import Java.io.InputStreamReader;
import Java.io.StringReader;
import Java.net.HttpURLConnection;
import Java.net.MalformedURLException;
import Java.net.URL;
import Java.util.ArrayList;
import Java.util.List;
import javax.xml.bind.JAXB;
import javax.xml.bind.JAXBException;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import org.w3c.dom.CharacterData;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;
public class RestServiceClient {
// http://localhost:8080/RESTfulExample/json/product/get
public static void main(String[] args) throws ParserConfigurationException,
SAXException {
try {
URL url = new URL(
"http://localhost:8080/CustomerDB/webresources/co.com.mazf.ciudad");
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setRequestMethod("GET");
conn.setRequestProperty("Accept", "application/xml");
if (conn.getResponseCode() != 200) {
throw new RuntimeException("Failed : HTTP error code : "
+ conn.getResponseCode());
}
BufferedReader br = new BufferedReader(new InputStreamReader(
(conn.getInputStream())));
String output;
Ciudades ciudades = new Ciudades();
System.out.println("Output from Server .... \n");
while ((output = br.readLine()) != null) {
System.out.println("12132312");
System.err.println(output);
DocumentBuilder db = DocumentBuilderFactory.newInstance()
.newDocumentBuilder();
InputSource is = new InputSource();
is.setCharacterStream(new StringReader(output));
Document doc = db.parse(is);
NodeList nodes = ((org.w3c.dom.Document) doc)
.getElementsByTagName("ciudad");
for (int i = 0; i < nodes.getLength(); i++) {
Ciudad ciudad = new Ciudad();
Element element = (Element) nodes.item(i);
NodeList name = element.getElementsByTagName("idCiudad");
Element element2 = (Element) name.item(0);
ciudad.setIdCiudad(Integer
.valueOf(getCharacterDataFromElement(element2)));
NodeList title = element.getElementsByTagName("nomCiudad");
element2 = (Element) title.item(0);
ciudad.setNombre(getCharacterDataFromElement(element2));
ciudades.getPartnerAccount().add(ciudad);
}
}
for (Ciudad ciudad1 : ciudades.getPartnerAccount()) {
System.out.println(ciudad1.getIdCiudad());
System.out.println(ciudad1.getNombre());
}
conn.disconnect();
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
public static String getCharacterDataFromElement(Element e) {
Node child = e.getFirstChild();
if (child instanceof CharacterData) {
CharacterData cd = (CharacterData) child;
return cd.getData();
}
return "";
}
}
Beachten Sie, dass die XML-Struktur, die ich im Beispiel erwartet hatte, wie folgt war:
<ciudad><idCiudad>1</idCiudad><nomCiudad>BOGOTA</nomCiudad></ciudad>
Aus Ihrer Frage ist nicht klar, ob Sie ein Framework verwenden. Für REST erhalten Sie eine WADL & Apache CXF-Unterstützung, die kürzlich für die WADL-first-Entwicklung von REST -Services hinzugefügt wurde. Bitte gehen Sie durch http://cxf.Apache.org/docs/index.html
JAX-RS Sie können jedoch auch ein normales DOM verwenden, das mit Standard-Java geliefert wird
Der folgende Code hilft, Rest-API über Java zu verbrauchen. URL - end point rest Wenn Sie keine Authentifizierung benötigen, müssen Sie die Variable authStringEnd nicht schreiben
Die Methode gibt ein JsonObject mit Ihrer Antwort zurück
public JSONObject getAllTypes() throws JSONException, IOException {
String url = "/api/atlas/types";
String authString = name + ":" + password;
String authStringEnc = new BASE64Encoder().encode(authString.getBytes());
javax.ws.rs.client.Client client = ClientBuilder.newClient();
WebTarget webTarget = client.target(Host + url);
Invocation.Builder invocationBuilder = webTarget.request(MediaType.APPLICATION_JSON).header("Authorization", "Basic " + authStringEnc);
Response response = invocationBuilder.get();
String output = response.readEntity(String.class
);
System.out.println(response.toString());
JSONObject obj = new JSONObject(output);
return obj;
}
Apache-HTTP-Client-APIs werden sehr häufig zum Aufrufen von HTTP-Rest-Diensten verwendet.
Hier ist ein Beispiel für die Verwendung eines HTTP-GET-Aufrufs.
import Java.io.IOException;
import org.Apache.http.HttpResponse;
import org.Apache.http.client.ClientProtocolException;
import org.Apache.http.client.HttpClient;
import org.Apache.http.client.methods.HttpGet;
import org.Apache.http.client.methods.HttpUriRequest;
import org.Apache.http.impl.client.HttpClientBuilder;
public class CallHTTPGetService {
public static void main(String[] args) throws ClientProtocolException, IOException {
HttpClient client = HttpClientBuilder.create().build();
HttpUriRequest httpUriRequest = new HttpGet("URL");
HttpResponse response = client.execute(httpUriRequest);
System.out.println(response);
}
}
Verwenden Sie die folgende Maven-Abhängigkeit, wenn Sie ein Maven-Projekt verwenden.
<dependency>
<groupId>org.Apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>4.5.1</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.Apache.httpcomponents/httpmime -->
<dependency>
<groupId>org.Apache.httpcomponents</groupId>
<artifactId>httpmime</artifactId>
<version>4.5.1</version>
</dependency>
Es ist nur eine 2-Zeilen-Code.
import org.springframework.web.client.RestTemplate;
RestTemplate restTemplate = new RestTemplate();
YourBean obj = restTemplate.getForObject("http://gturnquist-quoters.cfapps.io/api/random", YourBean.class);
Sie können einen Restful-Webdienst in Spring mit RestTemplate.class verwenden.
Beispiel:
public class Application {
public static void main(String args[]) {
RestTemplate restTemplate = new RestTemplate();
ResponseEntity<String> call= restTemplate.getForEntity("http://localhost:8080/SpringExample/hello");
System.out.println(call.getBody())
}
}