Einfache Webservices unter Java 6 Mustang

Hallo,

so kannst du dir aus einem WSDL Dokument einen Client generieren lassen (Beispiel unter Java 6):
Code:
D:\tmp\ws>mkdir generated
D:\tmp\ws>mkdir source

D:\tmp\ws>wsimport -d generated -s source http://localhost:44444/Calculator?wsdl

Ergebnis in generated:
Java:
package de.tutorials;

import javax.jws.WebMethod;
import javax.jws.WebParam;
import javax.jws.WebResult;
import javax.jws.WebService;
import javax.jws.soap.SOAPBinding;


/**
 * This class was generated by the JAXWS SI.
 * JAX-WS RI 2.0_02-b08-fcs
 * Generated source version: 2.0
 * 
 */
@WebService(name = "ICalculator", targetNamespace = "http://tutorials.de/")
@SOAPBinding(style = SOAPBinding.Style.RPC)
public interface ICalculator {


    /**
     * 
     * @param arg1
     * @param arg0
     * @return
     *     returns int
     */
    @WebMethod
    @WebResult(partName = "return")
    public int computeSumOf(
        @WebParam(name = "arg0", partName = "arg0")
        int arg0,
        @WebParam(name = "arg1", partName = "arg1")
        int arg1);

}

Java:
package de.tutorials;

import java.net.MalformedURLException;
import java.net.URL;
import javax.xml.namespace.QName;
import javax.xml.ws.Service;
import javax.xml.ws.WebEndpoint;
import javax.xml.ws.WebServiceClient;


/**
 * This class was generated by the JAXWS SI.
 * JAX-WS RI 2.0_02-b08-fcs
 * Generated source version: 2.0
 * 
 */
@WebServiceClient(name = "Calculator", targetNamespace = "http://tutorials.de/", wsdlLocation = "http://localhost:44444/Calculator?wsdl")
public class Calculator
    extends Service
{

    private final static URL CALCULATOR_WSDL_LOCATION;

    static {
        URL url = null;
        try {
            url = new URL("http://localhost:44444/Calculator?wsdl");
        } catch (MalformedURLException e) {
            e.printStackTrace();
        }
        CALCULATOR_WSDL_LOCATION = url;
    }

    public Calculator(URL wsdlLocation, QName serviceName) {
        super(wsdlLocation, serviceName);
    }

    public Calculator() {
        super(CALCULATOR_WSDL_LOCATION, new QName("http://tutorials.de/", "Calculator"));
    }

    /**
     * 
     * @return
     *     returns ICalculator
     */
    @WebEndpoint(name = "Calculator")
    public ICalculator getCalculator() {
        return (ICalculator)super.getPort(new QName("http://tutorials.de/", "Calculator"), ICalculator.class);
    }

}


Gruß Tom
 
also, ansich ist der code okay glaube ich, aber ein PDF in awt.desktop packen?
bei den webservices wird ja der datentyp in der WSDL beschrieben, hast du dir da schon mal spezifikationen angeschaut?

so auf die schnelle habe ich mal gefunden:
Webservices : unterstützte datentypen:
boolean, byte, short, int, long, float, double, die Wrapper Klassen Boolean, Integer, Double....
Arrays, div. Listen, Bäume etc
String, Date, Calendar, bigDecimal, BigInteger
Holder klassen
bei eigenen komplexen Klassen werden nur properties (setter+getter) serialisiert


vlt. gibt es ja die möglichkeit ein PDF in ein file zu wrappen und das zu serialisieren und rumschicken

falls es geht wird das sehr unperformant sein, würde ich nicht mit einem webservice machen

mfg

Naja so umständlich muss es ja gar nicht werden. Meine Überlegung geht in die richtung:

Code:
	public void pdfOeffnen()
	{
		  BufferedOutputStream out = null;
		  BufferedInputStream in = null;
		  try
		  {
			  URL myurl = new URL("http://10.100.0.27/pdf/1.pdf");
			  URLConnection conn = myurl.openConnection();
			  System.out.println(conn.getContentType());
			  
			  in = new BufferedInputStream(conn.getInputStream());
			  
			  out = new BufferedOutputStream(out);
			  byte[] buff = new byte[2048];
			    int bytesRead; 
			    // Simple read/write loop.
			    while(-1 != (bytesRead = in.read(buff, 0, buff.length))) 
			    {		    	
		           out.write(buff, 0, bytesRead);		            
		        }
		    } 
		  
		  catch(final MalformedURLException e) 
		  	{
		        System.out.println ( "MalformedURLException." );
		    } 

		  catch(final IOException e) 
		  	{		  
		        System.out.println ( "IOException." );
		    }
		   finally
		   {
			   out.close();
                                                   in.close();

			   
		   }
		 
	  }

So sollte es mir doch auch möglich sein, dem client das PDF anzeigen zu lassen oder?
 
Hallo,

ist es nicht möglich, dass du die Daten für das PDF in XML zum Client schickst und dort das PDF generierst? Dann hättest du nicht so viel Traffic.


MFG

zEriX
 
nein, denn der User soll das pdf im Browser angezeigt werden. Auf der Client Seite soll lediglich die AngebotsNummer eingegeben werden. Die Verarbeitung soll komplett auf dem Server stattfinden
 
was wäre wenn du eine HTML seite erzeugst (die kann ja ein reines textdokument sein mit tags und text) mit dem inhalt den du herzeigen willst

und diesen StringBuffer dann dem client schicken, dieser braucht dann nur mehr den browser öffnen

des mit dem pdf hinundherschicken wird echt schwierig denke ich

mfg
 
Hallo,
dachte ich mir dass der Client-Stub in diesem Fall nur über iwcompile statsich generiert werden kann. So weit läuft ja auch alles.

Was mich noch brennend interessieren würde ist die Frage, ob Java Mustang auch WSE beherscht oder ob hierfür J2EE die bessere Wahl ist. Gibt es zum Thema Java und WSE brauchbare Tutorials und Beispiele im Web ?

mfg
Roman
 
so habe nun ein servlet zwischen benutzer und web service geschalten.
läuft einwandfrei.

der benutzer sendet eine angebotsnummer, die angebotsnummer wird vom servlet entgegengenommen, welches eine verbindung zum webservice herstellt und die angebotsnummer übergibt.
als antwort erhält das servlet einen string, der den pfad mit der erstellten pdf enthält.
das servlet kann nun die pdf dem benutzer streamen.

habe ich dadurch die WebService-Architektur verfehlt?

Meines wissens glaube ich das nicht, möchte es jedoch von experten nochmal hören :)
 
Hallo,

das WebService-Beispiel für Java 6 ist wirklich sehr gut...

Ich hab aber das Problem, dass ich weiterhin Java 5 verwenden muss.
Hab versucht, im Forum ein Bsp. für Java 5 zu finden, die Suche war aber leider erfolglos.

Kann mir vielleicht jemand erklären, wie ich den WebService unter Java 5 machen kann?

Danke schon mal...

mfg
smuehlba
 
Danke für die schnelle Hilfe...

Aber nochmal zum Java 6 Beispiel: habs getestet und wenn ich im Client einen neuen Service generiere, bekomme ich folgenden Fehler:
javax.xml.ws.WebServiceException: javax.xml.ws.WebServiceException: Unable to createEndpointReference Provider: Failed to load javax.xml.ws.spi.Provider: org.jboss.ws.core.jaxws.spi.ProviderImpl
at javax.xml.ws.Service.create(Service.java:731)
at com.kontron.fctestclient.Main.main(Main.java:33)
Caused by: javax.xml.ws.WebServiceException: Unable to createEndpointReference Provider: Failed to load javax.xml.ws.spi.Provider: org.jboss.ws.core.jaxws.spi.ProviderImpl
at javax.xml.ws.spi.Provider.provider(Provider.java:99)
at javax.xml.ws.Service.<init>(Service.java:83)
at org.jboss.ws.core.jaxws.client.ServiceExt.<init>(ServiceExt.java:60)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
at java.lang.reflect.Constructor.newInstance(Constructor.java:494)
at javax.xml.ws.Service.create(Service.java:726)
... 1 more

Hab schon versucht, die Libraries zu tauschen, bringt aber nichts...

mfg
smuehlba
 
Zurück