Java, Webprogrammierung, Linux und mehr

Java, Webprogrammierung, Linux und mehr

Virtual Home of Johannes Geppert

  • Home
  • Über mich
  • Meine Linktipps
  • Kontakt
  • Impressum

Webservice Client mit jdk6 Tool wsimport

Posted in java, webservices by jogep
Mai 27 2009
TrackBack Address.

Passend zu meinen letzten Artikeln über Clients für REST Webservices mit Jersey und Webservices mit Axis2 und Spring bin ich heute über den Artikel bei jars.de über die Generierung von Webservices mit dem Tool wsimport gestoßen.

Webservices Clients mit wsimport generieren

jars.de zeigt wie man auf der Kommandozeile Clients aus einer WSDL Url generieren kann.

Weiter Artikel:
Java Client für REST WebService (JAX-RS)
PHP Client für REST WebService

No Comments yet »
Tagged as: client, java, jdk6, tool, webservice, wsdl, wsimport

Java Client für REST WebService (JAX-RS)

Posted in java, webservices by jogep
Mai 25 2009
TrackBack Address.

Nach dem Erstellen eines REST WebServices mit JAX-RS habe ich schon ein Beispiel für einen PHP Client eines WebServices gegeben. Natürlich lässt sich der REST WebService auch mit Java exzellent verarbeiten. Wie das geht werde ich in einem kleinen Beispiel demonstrieren. Der Client ruft den REST Web Service aus dem Tutorial für REST WebServices mit Jersey auf und benötigt auch die meisten JAR-Files aus diesem Beispiel. Zusätzlich wird noch das jersey-client-1.0.2.jar benötigt.

Jersey stellt uns für den einfachen Zugriff die Klassen Client und WebResource bereit.

		Client client = Client.create();
		WebResource wr = client.resource("http://localhost:8080/wstest/services/calculator/calc");

Mit Hilfe von WebResource können wir mit den HTTP Methoden post(), delete(), put() und natürlich get() unseren WebService aufrufen. Und mit der MultivaluedMap ist es uns möglich, dem WebService unsere Abfrageparameter mitzugeben.

package de.wstest.client;
 
import java.util.List;
 
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.MultivaluedMap;
 
import com.sun.jersey.api.client.Client;
import com.sun.jersey.api.client.GenericType;
import com.sun.jersey.api.client.WebResource;
import com.sun.jersey.core.util.MultivaluedMapImpl;
 
import de.wstest.MathResults;
import de.wstest.ServiceResult;
 
public class CalculatorClient {
 
	public static void main(String[] args) {
 
		Client client = Client.create();
 
		//URL des WebService
		WebResource wr = client.resource("http://localhost:8080/wstest/services/calculator/calc");
 
		//Parameter für WebService
		MultivaluedMap< String, String > params = new MultivaluedMapImpl();
		params.add("a", "234");
		params.add("b", "567");
 
		ServiceResult sr = wr.queryParams(params).accept(MediaType.APPLICATION_XML_TYPE).get(new GenericType< ServiceResult >() {});
 
		//Ergebnis ausgeben
		System.out.println(sr.getMessage());
		List< MathResults > mathResults = sr.getErgebnisse();
		for (MathResults mr : mathResults) {
			System.out.println(mr.getFormel()+" = "+mr.getErgebniss());
		}
	}
}

Die Ausgabe des WebServices ist wenig überraschend:

Results for Value a = 234, Value b = 567
a + b = 801
a - b = -333
a * b = 132678

FAZIT:
Wie man sieht, ist mit Hilfe der Jersey Klassen eine einfache Abfrage von REST WebServices möglich.

Ausführlichere Beispiele findet man auf den Enterprise Tech Tips Seiten von SUN, in welchem die Twitter Webservices benutzt werden. Dort gibt es dann auch Beispiele für das Benutzen der PUT, POST und DELETE Methoden.

1 Kommentar »
Tagged as: client, java, jax-rc, jersey, rest, rest client, restful, restservice, web service, webservice, webservice client

PHP Client für REST WebService

Posted in php, webservices by jogep
Mai 13 2009
TrackBack Address.

In einem meiner letzten Artikel habe ich geschrieben wie man mit Java und Jersey einen REST WebSerice erstellt. Jetzt folgt noch ein kleines Tutorial wie man selbigen WebService mit PHP aufrufen kann.

Um das Ergebnis des WebService verarbeiten zu können verwende ich SimpleXML mit dem das XML in ein Object umgewandelt wird. So können wir einfach die Attribute auslesen und weiterverarbeiten.

		$webservice =  'http://localhost:8080/wstest/services/calculator/calc?a=234&b=456';
 
		// WebService aufrufen
		$xml = file_get_contents($webservice);
 
		// HTTP Status auslesen
		if(isset($http_response_header[0]))
			list($version,$status_code,$msg) = explode(' ',$http_response_header[0], 3);
 
		// HTTP Status ueberpruefen
		if($status_code != 200) {
			die('Ungueltiger Aufruf des Web Services.');
		}
 
		//SimpleXML Object erzeugen
		$simple_xml = simplexml_load_string($xml); 
		echo('<html><body>');
		foreach ($simple_xml->ergebnisse as $erg)
		{
			echo('Das Ergebniss von '.$erg->formel.' ist '.$erg->ergebniss.'<br />');
		}
		echo('</body></html>');

Fazit:
Der Aufruf eines REST WebService ist mithilfe von SimpleXML eine einfache Sache die zeigt das WebServices mit PHP einfach aufzurufen und zu verarbeiten gehen.

1 Kommentar »
Tagged as: client, php, rest, rest-webservice, simplexml, webservice

RESTful Web Services (JAX-RS) mit Jersey

Posted in Allgemein, java, webservices by jogep
Mrz 13 2009
TrackBack Address.

Durch das Jersey Projekt existieren Bibliotheken die es Java Entwicklern besonders einfach machen REST Web Services zu entwickeln. In diesem Tutorial werde ich zeigen wie einfach es ist eine Web Service zu schreiben der uns einfache Mathematische Berechnung zurückliefert.

1.)
Wir erstellen in unserer Entwicklungsumgebung, in meinem Beispiel Eclipse, ein Web Projekt.  In das WEB-INF/lib Verzeichnis packen wir alle für Jersey benötigten JARs die es bei Jersey/Downloads runterzuladen gibt.  Für dieses Tutorial benötigen wir folgende Bibliotheken: jersey-server.jar, jersey-core.jar, jsr311-api.jar, asm.jar, jaxb-impl.jar, jaxb-api.jar, activation.jar, stax-api.jar

2.)
In unserer WEB-INF/web.xml fügen wir folgendes hinzu:

  <servlet>
  	<display-name>JAX-RS REST Servlet</display-name>
  	<servlet-name>REST-Servlet</servlet-name>
  	<servlet-class>
  		com.sun.jersey.spi.container.servlet.ServletContainer
  	</servlet-class>
  	<load-on-startup>1</load-on-startup>
  </servlet>
  <servlet-mapping>
  	<servlet-name>REST-Servlet</servlet-name>
  	<url-pattern>/services/*</url-pattern>
  </servlet-mapping>

3.)
Wir erstellen zwei Klassen die wir für unser Ergebniss benötigen.

Die erste Klasse MathResults kapselt unsere Mathematischen Ergebnisse.

package de.wstest;
 
public class MathResults {
	private String formel;
	private Integer ergebniss;
	public String getFormel() {
		return formel;
	}
	public void setFormel(String formel) {
		this.formel = formel;
	}
	public Integer getErgebniss() {
		return ergebniss;
	}
	public void setErgebniss(Integer ergebniss) {
		this.ergebniss = ergebniss;
	}
}

Und die zweite Klasse ServiceResult ist das Result unseres WebService

package de.wstest;
 
import java.util.List;
 
import javax.xml.bind.annotation.XmlRootElement;
 
@XmlRootElement
public class ServiceResult {
	private String message;
	private Integer returncode;
	private List<MathResults> ergebnisse;
 
	public Integer getReturncode() {
		return returncode;
	}
	public void setReturncode(Integer returncode) {
		this.returncode = returncode;
	}
	public String getMessage() {
		return message;
	}
	public void setMessage(String message) {
		this.message = message;
	}
 
	public List<MathResults> getErgebnisse() {
		return ergebnisse;
	}
	public void setErgebnisse(List<MathResults> ergebnisse) {
		this.ergebnisse = ergebnisse;
	}
}

4.)
Jetzt erstellen wir eine weitere Klasse CalculatorService, diese ist unser eigentlicher Webservice und wird durch Annotions als dieser gekennzeichnet. Ein gute Übersicht über zulässige Annotions findet Ihr im Wiki von Jersey.

package de.wstest;
 
import java.util.LinkedList;
import java.util.List;
 
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.QueryParam;
 
@Produces("application/xml")
@Path("calculator")
public class CalculatorService {
 
	@GET
	@Path("calc")
	@Produces("application/xml")
	public ServiceResult add(@QueryParam("a") Integer a, @QueryParam("b") Integer b) {
 
		ServiceResult r = new ServiceResult();
		List<MathResults> ergs = new LinkedList<MathResults>();
 
		if(a == null || b == null)
		{
			r.setMessage("No Values!");
			r.setReturncode(8);
			r.setErgebnisse(ergs);
			return r;
		}
 
		r.setMessage("Results for Value a = "+a+", Value b = "+b);
		r.setReturncode(0);
		MathResults e1 = new MathResults();
		e1.setFormel("a + b");
		e1.setErgebniss(a+b);
		MathResults e2 = new MathResults();
		e2.setFormel("a - b");
		e2.setErgebniss(a-b);
		MathResults e3 = new MathResults();
		e3.setFormel("a * b");
		e3.setErgebniss(a*b);
 
		ergs.add(e1);
		ergs.add(e2);
		ergs.add(e3);
 
 
		r.setErgebnisse(ergs);
		return r;
	}
}

Fertig ist unsere RESTFull Webservice. Nach dem deployen in einem ServletContainer wie Tomcat erhalten wir nach einem Aufruf des Webservices im Browser

http://localhost:8080/wstest/services/calculator/calc?a=234&b=456

folgendes Ergebniss:

<serviceResult>
	<ergebnisse>
		<ergebniss>690</ergebniss>
		<formel>a + b</formel>
	</ergebnisse>
	<ergebnisse>
		<ergebniss>-222</ergebniss>
		<formel>a - b</formel>
	</ergebnisse>
	<ergebnisse>
		<ergebniss>106704</ergebniss>
		<formel>a * b</formel>
	</ergebnisse>
	<message>Value a = 234, Value b = 456</message>
	<returncode>0</returncode>
</serviceResult>

Durch einen Aufruf der URL

http://localhost:8080/wstest/services/application.wadl

erhalten wir eine Übersicht über unsere Services und deren Parameter.

<application xmlns="http://research.sun.com/wadl/2006/10">
    <doc xmlns:jersey="http://jersey.dev.java.net/" jersey:generatedBy="Jersey: 1.0 10/13/2008 12:27 PM"/>
    <resources base="http://localhost:8080/wstest/services/">
        <resource path="calculator">
            <resource path="calc">
                <method name="GET" id="add">
                    <request>
                        <param xmlns:xs="http://www.w3.org/2001/XMLSchema" type="xs:int" style="query" name="a"/>
                        <param xmlns:xs="http://www.w3.org/2001/XMLSchema" type="xs:int" style="query" name="b"/>
 
                    </request>
                    <response>
                        <representation mediaType="application/xml"/>
                    </response>
                </method>
            </resource>
        </resource>
    </resources>
</application>

Fertig ist in wenigen Schritten unser REST Web Service der uns eine Liste von Berechnungen für einen Eingabe zurückliefert.

12 Comments »
Tagged as: java, jax-rc, jersey, rest, web service, webservice

Ein Webservice mit Axis2 und Spring

Posted in Allgemein, axis2, java, spring, webservices by jogep
Feb 06 2009
TrackBack Address.

Mit Axis2 ist das Erstellen von Webservices für Java Programmierer noch einfacher geworden. Mit folgendem kleinen Beispiel will ich zeigen, wie man einen Webservice programmieren kann, der von Spring ein Bean injiziert bekommt.

Als Erstes erstellen wir unseren Webservice als einfache Java Klasse:

package com.jgeppert.services;
 
import com.jgeppert.dao.MyDAO;
 
private MyDAO myDAO;
 
public class MyWebService
{
	/* Die Funktion add() ist unsere Webservice Operation die
	 * dann mit einem Client angesprochen werden kann.
	 */
	public String add(String text)
	{
		try
		{
			myDAO.save(text);
			return "insert successfully";
		}
		catch(RuntimeException e)
		{
			return e.getMessage();
		}
	}
 
	// Mit dieser Methode injiziert uns Spring unser DAO Objekt
	public String setMyDAO(MyDAO myDAO)
	{
		this.myDAO = myDAO;
	}
}

Als Zweites brauchen wir für Aris2 eine service.xml mit folgendem Inhalt:

<service>
	<description>My First WebService</description>
	<parameter name="ServiceClass" locked="false">
		com.jgeppert.services.MyWebService
	</parameter>
    <parameter name="ServiceObjectSupplier" locked="false">org.apache.axis2.extensions.spring.receivers.SpringServletContextObjectSupplier</parameter>
    <parameter name="SpringBeanName" locked="false">myWebService</parameter>
	<operation name="add">
		<messageReceiver class="org.apache.axis2.rpc.receivers.RPCMessageReceiver" />
	</operation>
 
</service>

Für Spring sind die zwei Parameter ServiceObjectSupplier und SpringBeanName entscheidend, um uns das benötigte DAO zu übergeben.

Mit Hilfe eines Ant Scriptes oder manuell kann man sich den Webservice in das für Axis2 benötigte AAR Archiv packen. Das Archiv ist im Grunde eine normale JAR Datei mit der service.xml im META-INF Verzeichnis.

Die Struktur des AAR-Archives sollte so aus sehen:

- MyWebService
   - META-INF
     - services.xml
   - com
     - jgeppert
       - services
         - MyWebService.class

Damit Spring unser DAO in dem Service injizieren kann, brauchen wir noch folgenden Eintrag in unserer applicationContext.xml.

<bean id="applicationContext" class="org.apache.axis2.extensions.spring.receivers.ApplicationContextHolder" />
 
	<bean id="myWebService" class="com.jgeppert.services.MyWebService">
    	<property name="myDAO" ref="MyDAO"/>
 
  	</bean>

Nach dem deployen des AAR-Archives im services Folder der Axis2 Web Application steht der Service nun zur Verfügung.

No Comments yet »
Tagged as: axis2, java, spring, webservice

Social Links

TwitterTwitter XingXing TechnoratiTechnorati GithubGithub

Kategorien

  • Allgemein
  • datenbanken
  • hdr
  • java
    • sap
    • spring
    • struts2
    • hibernate
    • axis2
    • webservices
    • Struts jQuery Plugin
  • linux
  • projekte
  • sonstiges
  • witze
  • jQuery
  • php
  • piratenpartei

Schlagwörter

ajax Array bilder checksum client e-mail email gallerie hdr hdr bild hdr bilder hibernate integration java jax-rc jersey jpeg jqgrid jQuery leipzig linux mail openSUSE options Photo php plugin properties qtpfsgui resize rest showcase smtp spring struts2 versenden video web gallerie web service webservice wein weinfreund weingut widgets witze

Archiv

  • März 2010 (1)
  • Januar 2010 (4)
  • Dezember 2009 (1)
  • November 2009 (1)
  • Oktober 2009 (1)
  • September 2009 (1)
  • August 2009 (1)
  • Juli 2009 (2)
  • Juni 2009 (4)
  • Mai 2009 (5)
  • April 2009 (1)
  • März 2009 (2)
  • Februar 2009 (2)
  • Januar 2009 (1)
  • September 2008 (1)
  • Juli 2008 (22)

Meta

  • Anmelden
  • Artikel-Feed (RSS)
  • Kommentare als RSS
  • WordPress.org



Add to Technorati Favorites
Technorati Profile
Programming Blog Directory
Programming Blogs - Blog Catalog Blog Directory

blogoscoop
Blogverzeichnis - Blog Verzeichnis bloggerei.de
BlogPingR.de - Blog Ping-Dienst, Blogmonitor
Blog Verzeichnis Social Bookmarking, RSS-Verzeichnis
Blog Top Liste - by TopBlogs.de
http://www.wikio.de
Technology Blogs - Blog Rankings

RSS Neues aus der Weinwelt

  • Wein, Jazz & Oldtimer - das stimmungsvolle Weinfest im Grünen
  • Weinmesse München am 13. und 14. März 2010
  • saborondo Wintermenü - Die perfekte Harmonie von Speisen und Wein
  • XXV. Hamburger Wein-Salon
  • Weingut Kummer-Schuster jetzt NEU bei weinfreund.de
  • Konsumgöttinnen
  • HM4 - der Jungwein des Hauses ist da!
  • Es wei(h)nachtet sehr...
  • Auszeichnungen im Fallstaff Weinguide 2009/2010
  • Weingut Müller-Grossmann jetzt NEU bei weinfreund.de
Powered by WordPress | “Blend” from Spectacu.la WP Themes Club