tutorials.de Buch-Aktion 05/2012
Seite 1 von 2 12 LetzteLetzte
ERLEDIGT
NEIN
ANTWORTEN
20
ZUGRIFFE
11903
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Registriert seit
    Jun 2002
    Ort
    Saarbrücken (Saarland)
    Beiträge
    9.886
    Blog-Einträge
    29
    Hallo,

    hier mal ein kleines Beispiel für die Erstellung und Verwendung eines Webservices
    unter Java 6:

    Unser ICalculator interface:
    Code java:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    
    package de.tutorials;
     
    import javax.jws.WebMethod;
    import javax.jws.WebService;
    import javax.jws.soap.SOAPBinding;
    import javax.jws.soap.SOAPBinding.Use;
     
    @WebService
    @SOAPBinding(style = SOAPBinding.Style.RPC)
    //@SOAPBinding(style = SOAPBinding.Style.DOCUMENT, use = Use.ENCODED)
    interface ICalculator {
      @WebMethod
      int computeSumOf(int a, int b);
    }

    Unsere Calculator Implementierung:
    Code java:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    
    package de.tutorials;
     
    import javax.jws.WebService;
     
    /**
     * @author Tom
     */
    @WebService(serviceName = "Calculator", portName = "Calculator", endpointInterface = "de.tutorials.ICalculator")
    public class Calculator implements ICalculator {
      public int computeSumOf(int a, int b) {
        return a + b;
      }
    }

    Unser Exporter / Client:
    Code java:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    
    /**
     * 
     */
    package de.tutorials;
     
    import java.net.URL;
     
    import javax.xml.namespace.QName;
    import javax.xml.ws.Endpoint;
    import javax.xml.ws.Service;
     
    /**
     * @author Tom
     */
    public class SimpleWebServiceExample {
      public static void main(String[] args) throws Exception {
        Endpoint endpoint = null;
        try {
          endpoint = Endpoint.publish("http://localhost:44444/Calculator", new Calculator());
          System.out.println("Service Published!");
          Service service = Service.create(new URL("http://localhost:44444/Calculator?wsdl"), new QName(
            "http://tutorials.de/", "Calculator"));
          ICalculator simpleService = service.getPort(ICalculator.class);
     
          System.out.println(simpleService.computeSumOf(11, 12));
        } finally {
          //endpoint.stop();
        }
      }
    }

    Ausgabe:
    Code :
    1
    2
    
    Service Published!
    23

    Die Annotation
    Code java:
    1
    
     @SOAPBinding(style = SOAPBinding.Style.RPC)
    im ICalculator ist notwendig, da sonst als Default SOPABinding DocumentStyle verwendet wird
    und die Laufzeit dann nach den entsprechenden Operations / Request / Response Wrapper Klassen sucht...
    Deshalb bekommt man dann diese Exception:
    Code java:
    1
    2
    3
    4
    
    ...
    @WebService
    //@SOAPBinding(style = SOAPBinding.Style.RPC)
    interface ICalculator {
    Resultiert in:
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    
    Exception in thread "main" Server Runtime Error: class: de.tutorials.jaxws.ComputeSumOf could not be found
        at com.sun.xml.internal.ws.transport.http.server.HttpEndpoint.publish(HttpEndpoint.java:269)
        at com.sun.xml.internal.ws.transport.http.server.EndpointImpl.publish(EndpointImpl.java:87)
        at com.sun.xml.internal.ws.spi.ProviderImpl.createAndPublishEndpoint(ProviderImpl.java:59)
        at javax.xml.ws.Endpoint.publish(Endpoint.java:156)
        at de.tutorials.SimpleWebServiceExample.main(SimpleWebServiceExample.java:19)
    Caused by: class: de.tutorials.jaxws.ComputeSumOf could not be found
        at com.sun.xml.internal.ws.modeler.RuntimeModeler.getClass(RuntimeModeler.java:271)
        at com.sun.xml.internal.ws.modeler.RuntimeModeler.processDocWrappedMethod(RuntimeModeler.java:562)
        at com.sun.xml.internal.ws.modeler.RuntimeModeler.processMethod(RuntimeModeler.java:509)
        at com.sun.xml.internal.ws.modeler.RuntimeModeler.processClass(RuntimeModeler.java:355)
        at com.sun.xml.internal.ws.modeler.RuntimeModeler.buildRuntimeModel(RuntimeModeler.java:251)
        at com.sun.xml.internal.ws.server.RuntimeEndpointInfo.createSEIModel(RuntimeEndpointInfo.java:170)
        at com.sun.xml.internal.ws.server.RuntimeEndpointInfo.init(RuntimeEndpointInfo.java:317)
        at com.sun.xml.internal.ws.transport.http.server.HttpEndpoint.publish(HttpEndpoint.java:298)
        at com.sun.xml.internal.ws.transport.http.server.HttpEndpoint.publish(HttpEndpoint.java:263)
        ... 4 more

    Unser WSDL:
    Code xml:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    
    <definitions targetNamespace="http://tutorials.de/" name="Calculator">
    <types/>
    
        <message name="computeSumOf">
    <part name="arg0" type="xsd:int"/>
    <part name="arg1" type="xsd:int"/>
    </message>
    
        <message name="computeSumOfResponse">
    <part name="return" type="xsd:int"/>
    </message>
    
        <portType name="ICalculator">
    
        <operation name="computeSumOf" parameterOrder="arg0 arg1">
    <input message="tns:computeSumOf"/>
    <output message="tns:computeSumOfResponse"/>
    </operation>
    </portType>
    
        <binding name="CalculatorBinding" type="tns:ICalculator">
    <soap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http"/>
    
        <operation name="computeSumOf">
    <soap:operation soapAction=""/>
    
        <input>
    <soap:body use="literal" namespace="http://tutorials.de/"/>
    </input>
    
        <output>
    <soap:body use="literal" namespace="http://tutorials.de/"/>
    </output>
    </operation>
    </binding>
    
        <service name="Calculator">
    
        <port name="Calculator" binding="tns:CalculatorBinding">
    <soap:address location="http://localhost:44444/Calculator"/>
    </port>
    </service>
    </definitions>

    Das Beispiel ist sogar so einfach, dass man sogar von einem C# Client aus den WebService ohne Probleme benutzen kann

    Gruß Tom
     
    Java rocks!
    How to become a good Java Programmer?
    Does IT in Java and .Net
    The only valid measurement of code quality: WTFs / minute
    Blog
    Xing
    Twitter

  2. #2
    Proko Proko ist offline Mitglied Silber
    Registriert seit
    May 2007
    Beiträge
    85
    Zitat Zitat von Thomas Darimont Beitrag anzeigen
    Das Beispiel ist sogar so einfach, dass man sogar von einem C# Client aus den WebService ohne Probleme benutzen kann
    das soll ja auch der sinn eines webservices sein

    abstraktion des codes => dieser wird in XML beschrieben/gebettet

    dadurch soll er sprachunabhängig, plattformunabhängig und typsicher sein

    mfg
     

  3. #3
    Registriert seit
    Jun 2002
    Ort
    Saarbrücken (Saarland)
    Beiträge
    9.886
    Blog-Einträge
    29
    Hallo,

    das soll ja auch der sinn eines webservices sein

    abstraktion des codes => dieser wird in XML beschrieben/gebettet

    dadurch soll er sprachunabhängig, plattformunabhängig und typsicher sein
    Nein... echt?

    Das ist schon klar... wenn man den Contract First Ansatz wählt (man designed die Webservice Definition / die ausgetauschten Nachrichten in XML über WSDL) ist das mit der Interoperabilität in der Regel auch kein Problem. Da ich hier jedoch das WSDL (under the hood) on the fly generieren lasse ist das mit der Interoperabilität nicht so einfach, aber in diesem Fall (da hier nur primitive und Strings ausgetauscht werden) ist das kein Problem. Wenn ich jedoch versuche ein Datum (java.util.Date) auszutauschen wirds schon etwas früher knallen

    Gruß Tom
     
    Java rocks!
    How to become a good Java Programmer?
    Does IT in Java and .Net
    The only valid measurement of code quality: WTFs / minute
    Blog
    Xing
    Twitter

  4. #4
    cipher cipher ist offline Rookie
    Registriert seit
    May 2007
    Beiträge
    5
    Hallo,

    bin gerade dabei mich in Client-Seite der Web Services unter JAVA einzuarbeiten und werde aus der Generierung des dynamischen Stubs nicht ganz schlau.

    Ist es auf der Serverseite zwingend notwendig, die WebMethod innerhalb eines Interfaces zu deklarieren und worin liegt der Sinn eines dynamisch generierten Stubs wenn mein Client für den Aufruf der WebMethod das zugehörige Interface kennen muss ?
     

  5. #5
    winniwinter winniwinter ist offline Mitglied
    Registriert seit
    Jul 2005
    Beiträge
    21
    ich beschäftige mich ebenfalls mit dem thema webservice,

    Momentan habe ich probleme meine Ausgabe dem Client zukommen zulassen. Bevor ich überhaupt noch weiter mache, könnte sich jmd meinen Code mal angucken, da ich nicht der überprofi in Java bin.
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    
    #Klasse AngebotsAufrufe()
    package AngebotService;
     
    import java.io.*;
    import java.net.URI;
    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.ResultSet;
    import java.sql.Statement;
    import java.awt.Desktop;
     
     
     
     
    public class AngebotsAufrufe extends CopyAngebot
    {
        String usr, pwd, host;
        String speicherort  =   null;
        String  verzeichnis =   null;
        String  bemerkung   =   "test";
        String  datum       =   "test";
        String  uhrzeit     =   "test";
        String response     =   null;
        String angebotsnr   =   null;
        Connection con      =   null;
        Statement smt       =   null;
        Reader datei        =   null;
        Desktop desk        =   Desktop.getDesktop();
        
        
     
        public Desktop CreateAngebot(String pdffile)
        {
            angebotsnr = pdffile;
            usr  = "dewea083";
            pwd  = "";
            host = "jdbc:mysql://localhost:3306/Angebotsspeicher";                      //Datenbank auf Server
            if(pdffile == null)
            {
                System.out.println("ERROR ANGEBOT CANNOT BE NULL!");
                return null;
            }
            else
            { 
                try
                {                       
     
                    src                     = "/home/dewea083/Documents/1178526328411.pdf";                                                                             //mkordner = new File("/usr/share/tomcat/webapps/pdf/"+angebotsnr).mkdir();     //erstelle einen Ordner der die AngebotsNummer hat
                    CopyAngebot daten   = new CopyAngebot();             
                    dest                    = "/srv/www/htdocs/pdf/"+pdffile+".pdf";                            //gibt den Speicherort und den Dateinamen für das Angebot an
                    daten.copyFile(src, dest);                                      //Datei wird in das Verzeichnis kopiert          
     
                    verzeichnis = dest;
                    Class.forName("com.mysql.jdbc.Driver");
                    con          = DriverManager.getConnection(host, usr, pwd);                                                                     //formatiert den Verzeichnisnamen so, dass er in der Datenbank gespeichert werden kann
                    smt      = con.createStatement();                       
                    String sql2 = "INSERT INTO Angebotverzeichnis(AngebotsNr,Verzeichnis,Bemerkung,Datum,Uhrzeit)" +
                               "VALUE(" +angebotsnr+ ",\"" +verzeichnis+ "\",\"" +bemerkung+"\",\"" +datum+ "\",\"" +uhrzeit+"\");";    
                 
                    smt.executeUpdate(sql2);                                            //Daten vom Angebot werden in der DB gespeichert     
     
                    System.out.println("Angebot "+pdffile+".pdf"+" wurde erstellt");
                    response = "Neues PDF erstellt, jetzt bitte anzeigen";
                    con.close();
                    smt.close();
                    desk.browse(new URI("http://10.100.0.27/pdf/"+pdffile));
                    return desk;
                }       
                catch(Exception ex)
                {                       
                System.out.println(ex);
                return null;
                }
            }
        }   
        
        public String GetAngebot(String pangebot)
        {
            usr  = "dewea083";
            pwd  = "";
            host = "jdbc:mysql://localhost:3306/Angebotsspeicher"; //Datenbank auf Server
            if(pangebot == null)
            {
                System.out.println("ERROR ANGEBOT CANNOT BE NULL!");
                return null;
            }
            else
                {   
                    try
                    {   
                     System.out.println("Gesucht wird: "+pangebot);
                     Class.forName("com.mysql.jdbc.Driver");                //JDBC Treiber laden
                     con = DriverManager.getConnection(host, usr, pwd);     //Verbindung aufbauen
                     smt =con.createStatement();
                     String sql = "SELECT AngebotsNr From Angebotsspeicher.Angebotverzeichnis " +
                                  "WHERE AngebotsNr ="+pangebot;
                     ResultSet rst = smt.executeQuery(sql);                 //SQL Anweisung ausführen
                     System.out.println("Angebot wird gesucht");            //Es wird nach der Angebotsnummer gesucht
                     
                     
                        while (rst.next())
                        {
                         speicherort = rst.getString(1);                   //Gib mir das Verzeichnis wo die Datei liegt 
                        }
                         con.close();
                         smt.close();
                    }
                    catch(Exception ex)
                    {                       
                    System.out.println(ex);
                    return null;
                    }
                    if (speicherort == null)
                    {
                        AngebotsAufrufe ca1 = new AngebotsAufrufe();
                        ca1.CreateAngebot(pangebot);
                        response = "Angebot nicht vorhanden. Erstelle es jetzt";    
                    }
                    else
                    {
                        System.out.println("Angebot "+pangebot +" bereits vorhanden");
                        response = "Angebots vorhanden, ich zeige es dir jetzt an";
                    }
                    return response;
                }
        }
        
        public void pdfanzeigen(String pdf)
        {
            try {desk.browse(new URI("http://10.100.0.27/pdf/"+pdf)); }
            catch(Exception ex) {}
        }
    }
     
    #Klasse AngebotsService
    package AngebotService;
     
     
    import java.awt.Desktop;
     
     
     
     
    public class AngebotsService 
    {
     
        public String findeAngebot(String fangebot)
        {
            AngebotsAufrufe aa1 = new AngebotsAufrufe();
            return aa1.GetAngebot(fangebot);
        }
     
        public Desktop erstelleAngebot(String eangebot)
        {
            AngebotsAufrufe aa2 = new AngebotsAufrufe();
            return aa2.CreateAngebot(eangebot);
        }
     
    }

    Der Service soll später mal dem User eine PDF zurück geben, bzw. wenn diese noch nicht existiert soll er sie generieren und im Anschluss dem Benutzer schicken.
    Ich hänge jedoch schon die gnaze zeit daran wie ich diese dem Benutzer senden kann

    Wie man sieht habe ich es mit der awt.Destkop klasse versucht, jedoch t das nicht.
    Ist also nur ein "TestCode"
     

  6. #6
    Proko Proko ist offline Mitglied Silber
    Registriert seit
    May 2007
    Beiträge
    85
    Zitat Zitat von cipher Beitrag anzeigen
    Hallo,

    bin gerade dabei mich in Client-Seite der Web Services unter JAVA einzuarbeiten und werde aus der Generierung des dynamischen Stubs nicht ganz schlau.

    Ist es auf der Serverseite zwingend notwendig, die WebMethod innerhalb eines Interfaces zu deklarieren und worin liegt der Sinn eines dynamisch generierten Stubs wenn mein Client für den Aufruf der WebMethod das zugehörige Interface kennen muss ?
    wenn du einen webservice erstellst z.bsp. in C# sieht das ja so aus...
    [Webservice...]
    class Service : System.Web.Services.WebService {
    [WebMethod]
    public String HelloWorld() {...}
    }

    wo soll hier das interface sein? das ist eine ganz normale klasse, nachdem du deinen web service server nicht in JAVA hast, nehme ich an, du hast in .NET entwickelt, wenn du dir ein neues WebService projekt anlegst sieht das so in etwa aus (wie gesagt, seh ich des net als interface)

    die informationen dieser klasse werden in ein xml format gepackt, und ein client kann sich diese holen

    wenn du unter java auf den webservice zugreifst, wir ein objekt WebServiceXY erstellt, welches als art proxy dient
    dieses proxy bietet dann die selben methoden, die auch der webservice bietet und somit kannst du dann die methoden des webservices nutzen

    der proxy/stub ist die verbindung zwischen client und server, und wenn dieser die methoden des webservices nicht kennen würde, dann könntest du die nicht aufrufen

    so ungefähr, aber des macht für mich schon sinn, dass er ein objekt anlegt, dass die methoden des webservices aufruft,

    dadurch wirds einfacher und du musst dich nicht mehr um die verbindung kümmern

    mfg
    Geändert von Proko (23.05.07 um 13:50 Uhr)
     

  7. #7
    Proko Proko ist offline Mitglied Silber
    Registriert seit
    May 2007
    Beiträge
    85
    Zitat Zitat von winniwinter Beitrag anzeigen
    ich beschäftige mich ebenfalls mit dem thema webservice,

    Momentan habe ich probleme meine Ausgabe dem Client zukommen zulassen. Bevor ich überhaupt noch weiter mache, könnte sich jmd meinen Code mal angucken, da ich nicht der überprofi in Java bin.

    Der Service soll später mal dem User eine PDF zurück geben, bzw. wenn diese noch nicht existiert soll er sie generieren und im Anschluss dem Benutzer schicken.
    Ich hänge jedoch schon die gnaze zeit daran wie ich diese dem Benutzer senden kann

    Wie man sieht habe ich es mit der awt.Destkop klasse versucht, jedoch t das nicht.
    Ist also nur ein "TestCode"
    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
    Geändert von Proko (23.05.07 um 14:03 Uhr)
     

  8. #8
    cipher cipher ist offline Rookie
    Registriert seit
    May 2007
    Beiträge
    5
    Zitat Zitat von Proko Beitrag anzeigen
    wenn du einen webservice erstellst z.bsp. in C# sieht das ja so aus...
    [Webservice...]
    class Service : System.Web.Services.WebService {
    [WebMethod]
    public String HelloWorld() {...}
    }

    wo soll hier das interface sein? das ist eine ganz normale klasse, nachdem du deinen web service server nicht in JAVA hast, nehme ich an, du hast in .NET entwickelt, wenn du dir ein neues WebService projekt anlegst sieht das so in etwa aus (wie gesagt, seh ich des net als interface)

    die informationen dieser klasse werden in ein xml format gepackt, und ein client kann sich diese holen

    wenn du unter java auf den webservice zugreifst, wir ein objekt WebServiceXY erstellt, welches als art proxy dient
    dieses proxy bietet dann die selben methoden, die auch der webservice bietet und somit kannst du dann die methoden des webservices nutzen

    der proxy/stub ist die verbindung zwischen client und server, und wenn dieser die methoden des webservices nicht kennen würde, dann könntest du die nicht aufrufen

    so ungefähr, aber des macht für mich schon sinn, dass er ein objekt anlegt, dass die methoden des webservices aufruft,

    dadurch wirds einfacher und du musst dich nicht mehr um die verbindung kümmern

    mfg

    Danke für die schnelle Antwort.

    Mir ist schon klar, wie die Web Services im Prinzip funktionieren. Mein Problem liegt in den Zeilen

    Service service = Service.create(new URL("http://localhost:44444/Calculator?wsdl"), new QName("http://tutorials.de/", "Calculator"));

    ICalculator simpleService = service.getPort(ICalculator.class);


    des obigen Beispiels. Die Generierung des Services mit Hilfe der WSDL URL sowie Servicename und Domain ist klar. Aber

    ICalculator simpleService = service.getPort(ICalculator.class)

    setzt doch die Kenntnis des Clients bezüglich des im Server beschriebenen Interfaces voraus, die WSDL-Beschreibung reicht da wohl nicht (die Methode aktzeptiert auch nur eine Interfacebeschreibung soweit ich weiss).
    Wenn ich nun einen Webservice unter .NET implementiert habe, muss ich meinem Java Client ebenfalls dieses Interace bekannt machen ? (Oder ist der obige Code irgendwo nicht vollständig?)

    mfg
     

  9. #9
    Registriert seit
    Jun 2002
    Ort
    Saarbrücken (Saarland)
    Beiträge
    9.886
    Blog-Einträge
    29
    Hallo,

    das Interface auf Clientseite zu haben ist sehr sinnvoll, da du so getyped mit dem WebService interagieren kannst. Außerdem kannst du dann auch die Remoting-Implementierung Transparent halten (vielleicht willst du irgendwann mal, dass du RMI statt Webservices verwendest..., wenn du dann die entsprechenden Service Interfaces verwendet hast brauchst du hier keinen Code zu verändern) Wenn du den oben definierten Webservice über .Net ansprichst wird dir auch ein entsprechendes Client interface generiert... hier liefere ich dieses der Einfachheit halber jedoch mit, um den Schritt auf Java Client Seite ein zusätzliches Interface generieren zu müssen einzusparen.)

    Gruß Tom
     
    Java rocks!
    How to become a good Java Programmer?
    Does IT in Java and .Net
    The only valid measurement of code quality: WTFs / minute
    Blog
    Xing
    Twitter

  10. #10
    cipher cipher ist offline Rookie
    Registriert seit
    May 2007
    Beiträge
    5
    Hallo, vielen Dank.

    Dann muss ich nur noch herausfinden, wo das entsprechende Interface generiert wird. Ich habe die entsprechenden Web Services bereits mit statisch generierten Stubs zum laufen gebracht - war kein Problem, hier bekomme ich ja das Interface - aber bei den dynamisch generierten sehe ich das einfach nicht (finde auch keine adequaten Beispiele im Netz).

    mfg
     

  11. #11
    Registriert seit
    Jun 2002
    Ort
    Saarbrücken (Saarland)
    Beiträge
    9.886
    Blog-Einträge
    29
    Hallo,

    so kannst du dir aus einem WSDL Dokument einen Client generieren lassen (Beispiel unter Java 6):
    Code :
    1
    2
    3
    4
    
    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:
    Code java:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    
     
    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);
     
    }

    Code java:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    
     
    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
     
    Java rocks!
    How to become a good Java Programmer?
    Does IT in Java and .Net
    The only valid measurement of code quality: WTFs / minute
    Blog
    Xing
    Twitter

  12. #12
    winniwinter winniwinter ist offline Mitglied
    Registriert seit
    Jul 2005
    Beiträge
    21
    Zitat Zitat von Proko Beitrag anzeigen
    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 :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    
        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?
     

  13. #13
    Avatar von zerix
    zerix zerix ist offline Hausmeister
    tutorials.de Moderator
    Registriert seit
    May 2005
    Beiträge
    4.335
    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
     
    Es ist schwer Allwissend zu sein. Aber ich komme damit klar. ;-)

  14. #14
    winniwinter winniwinter ist offline Mitglied
    Registriert seit
    Jul 2005
    Beiträge
    21
    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
     

  15. #15
    Proko Proko ist offline Mitglied Silber
    Registriert seit
    May 2007
    Beiträge
    85
    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
     

Ähnliche Themen

  1. Webservices JAX-WS unter Mac OS
    Von xxsaikoxx im Forum Enterprise Java (JEE, J2EE, Spring & Co.)
    Antworten: 2
    Letzter Beitrag: 20.03.08, 12:41
  2. [Mustang] Heap Analyse unter Java 6
    Von Thomas Darimont im Forum Java Technology News
    Antworten: 0
    Letzter Beitrag: 15.04.06, 16:30
  3. [Mustang] Liste der API Aenderungen in Java 6
    Von Thomas Darimont im Forum Java Technology News
    Antworten: 0
    Letzter Beitrag: 24.03.06, 16:12
  4. Java 6 Mustang & ein Blick hinter die Kulissen
    Von Thomas Darimont im Forum Java Technology News
    Antworten: 0
    Letzter Beitrag: 24.01.06, 23:59
  5. SplashScreen API in Java 6 (Mustang)
    Von Thomas Darimont im Forum Java
    Antworten: 1
    Letzter Beitrag: 05.10.05, 13:27