Avatar billede mikmakmuk Nybegynder
24. juli 2007 - 14:50 Der er 28 kommentarer og
1 løsning

wsdl eksempel

Hej Eksperter,

Er der er som har et godt eksempel på hvordan jeg implementerer wsdl? Jeg modtager en række metoder i en xml fil. Nu skal jeg så bare finde ud af at kalde dem
Avatar billede arne_v Ekspert
24. juli 2007 - 15:08 #1
Jeg er doven, saa jeg plejer at bruge Apache Axis WSDL2Java tool til at generere
en stub udfra WSDL filen, saa kalder man en web service ligesom man kalder anden
kode.
Avatar billede snoop_one Nybegynder
24. juli 2007 - 15:26 #2
Helt enig med arne_v jeg benytter selv eclipse_wpt der har mulighed for at lave en stub udfra din wsdl fil.
Avatar billede arne_v Ekspert
24. juli 2007 - 15:41 #3
Jeg mener at Eclipse WPT faktisk bruger Axis.
Avatar billede snoop_one Nybegynder
24. juli 2007 - 16:23 #4
Jep det gør den også... :) men foredelen er så at man faktisk kan bede wpt om at lave en klient test klasse så man kan teste WSDL filen.. (Jeg antager, at det er noget webservice det bliver brugt til)
Avatar billede mikmakmuk Nybegynder
25. juli 2007 - 06:50 #5
Det er det også. Jeg får WSDL filen leveret. Den indeholder en række metoder som returnerer noget html i en String. Det skal jeg på en eller anden måde have implementeret på en jsp side
Avatar billede mikmakmuk Nybegynder
25. juli 2007 - 09:13 #6
Jeg har i princippet det her:

<portType name="ETNAVN">
<operation name="getETELLERANDET">
<input message="tns:getETELLERANDET"></input>
<output message="tns:getETELLERANDETResponse"></output>
</operation>

Hvordan kalder jeg metoderne med noget JSP? Er der noget jeg slet ikke har forstået?
Avatar billede mikmakmuk Nybegynder
25. juli 2007 - 09:15 #7
så vidt jeg har forstået returnere metoden en String som i dette tilfælde er noget html.
Avatar billede mikmakmuk Nybegynder
25. juli 2007 - 12:29 #8
Jeg kigger lige P.T på noget axis
Avatar billede arne_v Ekspert
25. juli 2007 - 13:10 #9
Du kan bede Axis/WPT om at generere en Java klasse udfra WSDL.

Den Java klasse kan du bruge paa din JSP side ligesom enhver anden Java klasse.
Avatar billede mikmakmuk Nybegynder
25. juli 2007 - 13:58 #10
WSDL filen ligger på en url. Kan du vise mig præcis hvad jeg skal gøre jeg har downloadet axis-src-1_4.zip.
Avatar billede mikmakmuk Nybegynder
25. juli 2007 - 14:09 #11
Jeg forstår heller ikke hvordan jeg kan lave en JAVA klasse udfra WSDL filen. Er det ikke bare noget XML?
Avatar billede arne_v Ekspert
25. juli 2007 - 14:58 #12
SOAP kald er faktisk metode kald. WSDL er en beskrivelse af de metoder der kan kaldes.

Saa ja - WSDL kan oversaettes til Java kode.
Avatar billede arne_v Ekspert
25. juli 2007 - 15:03 #13
http://www.eksperten.dk/artikler/159 er lidt gammel men giver lidt indblik i tingene
inkl. WSDL2Java
Avatar billede mikmakmuk Nybegynder
25. juli 2007 - 15:38 #14
cool. Det lykkes mig at få wsdl2java pluginen til at virke i eclipse og der kom også fire javafiler ud af det :-)
Avatar billede mikmakmuk Nybegynder
26. juli 2007 - 08:24 #15
nu var jeg lige så glad fordi jeg fik de 4 java filer. Jeg kan ikke få dem til at kompile. Jeg har tilføjet dem til et projekt i JCreator men får en række fejl.

cannot access javax.xml.rpc.Stub
package javax.xml.rpc does not exist

for at starte et sted
Avatar billede mikmakmuk Nybegynder
26. juli 2007 - 09:35 #16
det fandt jeg så åbenbart ud af. Det kompilerer i hvert tilfælde.
Avatar billede mikmakmuk Nybegynder
26. juli 2007 - 10:19 #17
Jeg fatter det simpelhen ikke. Jeg har lavet de der 4 filer

Navn
NavnPortBindingStub
NavnplexService
NavnServiceLocator

men jeg kan ikke få det til at virke :-(

Jeg har lagt dem i en jar og lagt den under lib i min webapp

<%@ page import="navn.NavnServiceLocator,navn.Navn,
navn.NavnService" %>
<html><body>
Text:
<% 
    NavnService service = new NavnServiceLocator();
      Hello port = service.getNsvnPort();
//      String resp = port.sayHello(request.getParameter("username"));

%>
<h2><font color="black"><%-- =resp --%></font></h2>
</body>
</html>
Avatar billede mikmakmuk Nybegynder
26. juli 2007 - 11:22 #18
Jeg skal reelt bare kalde getDetJegSkalBruge() men hvordan gør jeg lige det???

package MINPAKKE;

public interface Navn extends java.rmi.Remote {
    public java.lang.String getDetJegSkalBruge() throws java.rmi.RemoteException;
}
Avatar billede mikmakmuk Nybegynder
26. juli 2007 - 14:20 #19
Der skulle ikke være noget galt i at jeg downloader .wsdl filen og laver koden ud fra den vel. Den hedder godt nok .xml og jeg omdøber den til .wsdl??
Avatar billede arne_v Ekspert
26. juli 2007 - 15:19 #20
Du kan sagtens downloade WSDL filen og bruge den.
Avatar billede arne_v Ekspert
26. juli 2007 - 15:19 #21
Hvad er der i 26/07-2007 10:19:30 koden som ikke virker ?
Avatar billede mikmakmuk Nybegynder
29. juli 2007 - 12:17 #22
Jeg har haft lejlighed til at kigge nærmere på problemet

    NAVNService service = new NAVNServiceLocator();
      NAVN port = service.getNAVNPort();
      String resp=port.MINMETODE();

Det virker nu. Problemet var at der manglede nogle .jar filer i tomcat
Avatar billede mikmakmuk Nybegynder
29. juli 2007 - 12:19 #23
Læg endelig et svar så jeg kan lukke.
Avatar billede arne_v Ekspert
29. juli 2007 - 17:52 #24
svar
Avatar billede mikmakmuk Nybegynder
07. august 2007 - 11:49 #25
I ServiceLocator har jeg denne linie

private final java.lang.String Port_address = "http://URL/bib/webservice";

Det er ikke så fedt at den er statisk, altså URL'en fordi den kan ændre sig hvilket betyder at alt skal genstartes. Kan man komme uden om det?
Avatar billede arne_v Ekspert
07. august 2007 - 15:41 #26
Er der ikke en metode du kan kalde hvor du kan angive en anden URL ?
Avatar billede arne_v Ekspert
07. august 2007 - 19:02 #27
F.eks.:

      NAVNService service = new NAVNServiceLocator();
      NAVN port = service.getNAVNPort(enandenurl);
      String resp=port.MINMETODE();
Avatar billede mikmakmuk Nybegynder
08. august 2007 - 13:26 #28
Ikke sådan lige umiddelbart

NavnServiceLocator ser i princippet således ud

package dk.hokus.NAVN;

public class NAVNServiceLocator extends org.apache.axis.client.Service implements dk.hokus.NAVN.NAVNService {

    // Use to get a proxy class for NAVNPort
 
        private final java.lang.String NAVNPort_address = "http://URL:PORT/NAVN/webservice";
   
    public java.lang.String getNAVNPortAddress() {
        return NAVNPort_address;
    }

    // The WSDD service name defaults to the port name.
    private java.lang.String NAVNPortWSDDServiceName = "NAVNPort";

    public java.lang.String getNAVNPortWSDDServiceName() {
        return NAVNPortWSDDServiceName;
    }

    public void setNAVNPortWSDDServiceName(java.lang.String name) {
        NAVNPortWSDDServiceName = name;
    }

    public dk.hokus.NAVN.NAVN getNAVNPort() throws javax.xml.rpc.ServiceException {
      java.net.URL endpoint;
        try {
            endpoint = new java.net.URL(NAVNPort_address);
        }
        catch (java.net.MalformedURLException e) {
            throw new javax.xml.rpc.ServiceException(e);
        }
        return getNAVNPort(endpoint);
    }

    public dk.hokus.NAVN.NAVN getNAVNPort(java.net.URL portAddress) throws javax.xml.rpc.ServiceException {
        try {
            dk.hokus.NAVN.NAVNPortBindingStub _stub = new dk.hokus.NAVN.NAVNPortBindingStub(portAddress, this);
            _stub.setPortName(getNAVNPortWSDDServiceName());
            return _stub;
        }
        catch (org.apache.axis.AxisFault e) {
            return null;
        }
    }

    /**
    * For the given interface, get the stub implementation.
    * If this service has no port for the given interface,
    * then ServiceException is thrown.
    */
    public java.rmi.Remote getPort(Class serviceEndpointInterface) throws javax.xml.rpc.ServiceException {
        try {
            if (dk.hokus.NAVN.NAVN.class.isAssignableFrom(serviceEndpointInterface)) {
                dk.hokus.NAVN.NAVNPortBindingStub _stub = new dk.hokus.NAVN.NAVNPortBindingStub(new java.net.URL(NAVNPort_address), this);
                _stub.setPortName(getNAVNPortWSDDServiceName());
                return _stub;
            }
        }
        catch (java.lang.Throwable t) {
            throw new javax.xml.rpc.ServiceException(t);
        }
        throw new javax.xml.rpc.ServiceException("There is no stub implementation for the interface:  " + (serviceEndpointInterface == null ? "null" : serviceEndpointInterface.getName()));
    }

    /**
    * For the given interface, get the stub implementation.
    * If this service has no port for the given interface,
    * then ServiceException is thrown.
    */
    public java.rmi.Remote getPort(javax.xml.namespace.QName portName, Class serviceEndpointInterface) throws javax.xml.rpc.ServiceException {
        if (portName == null) {
            return getPort(serviceEndpointInterface);
        }
        String inputPortName = portName.getLocalPart();
        if ("NAVNPort".equals(inputPortName)) {
            return getNAVNPort();
        }
        else  {
            java.rmi.Remote _stub = getPort(serviceEndpointInterface);
            ((org.apache.axis.client.Stub) _stub).setPortName(portName);
            return _stub;
        }
    }

    public javax.xml.namespace.QName getServiceName() {
        return new javax.xml.namespace.QName("http://hokus.dk/NAVN", "NAVNService");
    }

    private java.util.HashSet ports = null;

    public java.util.Iterator getPorts() {
        if (ports == null) {
            ports = new java.util.HashSet();
            ports.add(new javax.xml.namespace.QName("NAVNPort"));
        }
        return ports.iterator();
    }

}
Avatar billede arne_v Ekspert
09. august 2007 - 01:12 #29
Kan du ikke kalde den her:

public dk.hokus.NAVN.NAVN getNAVNPort(java.net.URL portAddress) throws javax.xml.rpc.ServiceException {

?
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester