Avatar billede allau Nybegynder
23. maj 2001 - 12:56 Der er 6 kommentarer og
2 løsninger

SOAP deployment --> JAVA

Hi all,

There is something wrong with my deployment. I cant get this to work :-( I\'ve made a simple Test-class:


public class Test  {
    String first = \"\";
    String last = \"\";
    public Test(String f, String l)  {
        first = f;
        last = l;
    }
   
    public String toString()  {
        return \"\" + first + \" \" + last;
    }
}

This Test-class, I want to return to my client, when the client invokes the
getTest-method on my server(HelloAdvancedSoapServer) which is deployed on
the SOAP admin tool. View the HelloAdvancedSoapServer hereunder:

public class HelloAdvancedSoapServer {
  public Test getTest(String f, String l) {
    Test test = new Test(f, l);
    System.out.println(test);
    return(test);
  }
}

My SOAP client looks like this, and I know for sure, that it passes the
arguments OK, but it doesnt get a response:

// Contacts Soap Server to get a greeting.
 
import java.net.* ;
import java.util.* ;
 
import org.apache.soap.* ;
import org.apache.soap.rpc.* ;
import org.apache.soap.encoding.* ;
import org.apache.soap.encoding.soapenc.* ;
 
public class HelloAdvancedSoapClient {
 
  public static void main(String[] args) throws Exception {
 
    String f = \"Robert\" ;
    String l = \"Yeah right\" ;
    String host = \"localhost\" ;
    String port = \"8080\" ;
 
    URL url = new URL(\"http://\" + host + \":\" + port
+ \"/soap/servlet/rpcrouter\") ;
 
    Call call = new Call() ;
    call.setEncodingStyleURI(Constants.NS_URI_SOAP_ENC) ;
    call.setTargetObjectURI(\"urn:HelloAdvancedSoapServer\") ;
    call.setMethodName(\"getTest\") ;
 
    Vector v = new Vector() ;
    v.addElement(new Parameter(\"f\", String.class, f, null)) ;
    v.addElement(new Parameter(\"l\", String.class, l, null)) ;
    call.setParams(v) ;
 
    try{
      Response resp = call.invoke(url,\"\") ;
      if(resp.generatedFault()) {
        System.out.println(\"Error: Something went wrong.\");
      }else {
        Parameter p = resp.getReturnValue() ;
        Object o = p.getValue();
      }
    }catch(SOAPException e) {
      System.err.println(\"Uh-Oh!\") ;
      System.err.println(\"Faultcode:\" + e.getFaultCode()+\"\\n\") ;
      System.err.println(\"Message from SOAPException: \" + e.getMessage()
+ \"\\n\") ;
      System.out.println(e) ;
    }
  }
}

I think I have deployed the server wrong!!! What should I do to make the
DeploymentDescriptor.xml? Which settings should I set in the type mapping
part of the SOAP admin tool?

Any help appriciated...

Cheers

Allan Lauridsen
ProActive Consulting A/S
Denmark
Avatar billede pstric Nybegynder
23. maj 2001 - 15:52 #1
For det første, så synes jeg at du skal stille dine spørgsmål på dansk!

Du bruger ikke o i klienten. Måske kunne en lille System.out.println((Test) o.toString()); hjælpe dig? Du kommer vel ikke ned i catch blokken?
Avatar billede pstric Nybegynder
23. maj 2001 - 15:55 #2
Undskyld:

(Test) o.toString()

skal naturligvis være:

((Test) o).toString() eller bare o.toString()
Avatar billede bearhugx Nybegynder
23. maj 2001 - 16:57 #3
Undskyld min ignorance, men _HVAD_ betyder SOAP ????
Avatar billede pstric Nybegynder
23. maj 2001 - 17:33 #4
Simple Object Activation Protocol - vistnok.
Avatar billede bearhugx Nybegynder
23. maj 2001 - 17:42 #5
Noget a la CORBA ???
Avatar billede pstric Nybegynder
23. maj 2001 - 17:57 #6
Avatar billede logical Nybegynder
23. maj 2001 - 19:39 #7
Du bruger formodentlig Apache som SOAP server (Simple Object ACCESS protocol),
så der skal din deploymentdescriptor.xml se således ud:

<isd:service xmlns:isd=\"http://xml.apache.org/xml-soap/deployment\" id=\"urn:HelloAdvancedSoapServer\">
  <isd:provider type=\"java\" scope=\"Application\" methods=\"getTest\">
    <isd:java class=\"HelloAdvancedSoapServer\" static=\"false\"/>
  </isd:provider>
  <isd:mappings>
    <isd:map encodingStyle=\"http://schemas.xmlsoap.org/soap/encoding/\" xmlns:x=\"urn:HelloAdvancedSoapServer\" qname=\"x:test\" javaType=\"Test\" xml2JavaClassName=\"org.apache.soap.encoding.soapenc.BeanSerializer\" java2XMLClassName=\"org.apache.soap.encoding.soapenc.BeanSerializer\"/>
  </isd:mappings>
</isd:service>


Bemærk din underklasse test, vil jeg foretrække at serialisere med apaches BeanSerializer, så der skal du sikre dig, at din klasse er fuldt Bean compliant, hvilket vil sige en no-arg constructor samt setter og getter for hvert field (Så kan apache lave xml2javaClass på den).

Jeg skal lige sige, jeg har ikke apache og soap kørende her, så jeg kan ikke afprøve det, men jeg har arbejdet med det på et tidspunkt, og så svært er det altså heller ikke :-)
Avatar billede logical Nybegynder
23. maj 2001 - 19:41 #8
Og soap kan nemt sættes i bås som Remote Procedure Call (RPC) ved hjælp af XML og HTTP. Ikke helt CORBA :-)
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