PDA

Visualizza la versione completa : Da SOAP - RPC a implementazione JAVA


Fra
29-08-2003, 16:37
Ciao!
Mi sapete tradurre questo msg SOAP in istruzioni Java (utilizzando APACHE-SOAP o anche JAXM)?
In particolare mi servirebbe la parte relativa ai PARAMETRI (il resto nn tanto).

Ecco il msg :


<SOAP-ENV:Envelope
xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
<SOAP-ENV:Body>
<Discover xmlns="urn:schemas-microsoft-com:xml-analysis"
SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
<RequestType>MDSCHEMA_CUBES</RequestType>
<Restrictions>
<RestrictionList>
<CATALOG_NAME>
FoodMart 2000
</CATALOG_NAME>
</RestrictionList>
</Restrictions>

<Properties>
<PropertyList>
<DataSourceInfo>
Provider=MSOLAP;Data Source=local;
</DataSourceInfo>
<Catalog>
Foodmart 2000
</Catalog>
<Format>
Tabular
</Format>
</PropertyList>
</Properties>
</Discover>


Per ora sto utilizzando le librerie APACHE-SOAP, però nn riesco a capire come fare per definire gerarchie di parametri.

Mi aiutate? (x Angelo1974 va bene anche JAXM)

:stordita:

Angelo1974
29-08-2003, 17:20
Fra, sempre perchè ora sto al lavoro e non il materiale cercherò di postarti un esempio tra stasera e domani..sorry :ciauz:

Fra
29-08-2003, 17:22
ok, grazie angelo.
Cmq per semplificare, ciò che non riesco a fare è definire è ad esempio questa parte:


<Restrictions>
<RestrictionList>
<CATALOG_NAME>
FoodMart 2000
</CATALOG_NAME>
</RestrictionList>
</Restrictions>


Come si fa?

Angelo1974
30-08-2003, 21:52
Fra scusami se oggi non t'ho risposto ma non ho avuto 5 minuti di tempo per poter sviluppare l'esempo che mi hai chiesto ( a volte si lavora di più nei giorni di "festa" :) ). Comunque entro domani cercherò di darti un esempio...ciao

Angelo1974
31-08-2003, 12:17
Ciao Fra, ho buttato giù qualche riga di codice riguardante le difficoltà che hai incontrato, spero di aver interpretato bene il problema.... ti posto il codice scritto ( utilizzando JAXM ) e il messaggio SOAP generato:

CODICE:

package htmlForum;

import java.io.IOException;
import java.io.FileOutputStream;
// JAXM
import javax.xml.soap.SOAPConnectionFactory;
import javax.xml.soap.SOAPConnection;
import javax.xml.soap.MessageFactory;

import javax.xml.soap.SOAPMessage;
import javax.xml.soap.SOAPElement;
import javax.xml.soap.SOAPPart;
import javax.xml.soap.SOAPEnvelope;
import javax.xml.soap.SOAPHeader;
import javax.xml.soap.SOAPHeaderElement;
import javax.xml.soap.SOAPBodyElement;
import javax.xml.soap.SOAPBody;
import javax.xml.soap.Name;

import javax.xml.soap.AttachmentPart;
import javax.activation.DataHandler;
import javax.activation.FileDataSource;

import javax.xml.soap.SOAPException;
import javax.xml.messaging.URLEndpoint;


public class Esempio {
public static void main(String args[]) {
try {
System.out.println("Inizio creazione messaggio......");
MessageFactory messageFactory = MessageFactory.newInstance();
SOAPMessage requestSoapMsg = messageFactory.createMessage();


// Creo i componenti SOAP
SOAPPart requestSoapPart = requestSoapMsg.getSOAPPart();
SOAPEnvelope requestSoapEnv = requestSoapPart.getEnvelope();
SOAPBody requestSoapBody = requestSoapEnv.getBody();

SOAPBodyElement elemento = requestSoapBody.addBodyElement(requestSoapEnv.crea teName(null,"Discover","urn:schemas-microsoft-com:xml-analysis"));

elemento.setEncodingStyle("http://schemas.xmlsoap.org/soap/encoding/");
elemento.addChildElement(requestSoapEnv.createName ("RequestType")).addTextNode("MDSCHEMA_CUBES");


SOAPElement restrictions = elemento.addChildElement(requestSoapEnv.createName ("Restrictions"));
SOAPElement restrictionList = restrictions.addChildElement(requestSoapEnv.create Name("RestrictionList"));
SOAPElement cataloghi = restrictionList.addChildElement(requestSoapEnv.cre ateName("CATALOG_NAME")).addTextNode("FoodMart 2000");

SOAPElement properties = elemento.addChildElement(requestSoapEnv.createName ("Properties"));
SOAPElement propertyList = properties.addChildElement( requestSoapEnv.createName("PropertyList") );
SOAPElement dataSourceInfo = propertyList.addChildElement( requestSoapEnv.createName("DataSourceInfo") ).addTextNode("Provider=MSOLAP;Data Source=local;");
SOAPElement catalog = propertyList.addChildElement( requestSoapEnv.createName("Catalog") ).addTextNode("Foodmart 2000");
SOAPElement format = propertyList.addChildElement( requestSoapEnv.createName("Format") ).addTextNode("Tabular");


// Salvo tutti i cambiamenti prima di stampare a video
requestSoapMsg.saveChanges();
try {
//Se commenti questa linea e decommenti la successiva l'uscita sarà stampata su un file e non a video
requestSoapMsg.writeTo(System.out);
//requestSoapMsg.writeTo(new FileOutputStream("e:/generati/SOAPMessage.txt"));
} catch (IOException e) {
e.printStackTrace();
}
} catch (SOAPException e) {
e.printStackTrace();
}
System.out.println("\n Messaggio creato");
} // main()
}

MESSAGGIO SOAP:

Inizio creazione messaggio......
<?xml version="1.0" encoding="UTF-8"?>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<soapenv:Body>
<Discover: soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xmlns:Discover="urn:schemas-microsoft-com:xml-analysis" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/">
<RequestType xmlns="">MDSCHEMA_CUBES</RequestType>
<Restrictions xmlns="">
<RestrictionList xmlns="">
<CATALOG_NAME xmlns="">FoodMart 2000</CATALOG_NAME>
</RestrictionList>
</Restrictions>
<Properties xmlns="">
<PropertyList xmlns="">
<DataSourceInfo xmlns="">Provider=MSOLAP;Data Source=local;</DataSourceInfo>
<Catalog xmlns="">Foodmart 2000</Catalog>
<Format xmlns="">Tabular</Format>
</PropertyList>
</Properties>
</Discover:>
</soapenv:Body>
</soapenv:Envelope>
Messaggio creato


Spero ti sia utile e che sia ciò che ti serve....in ogni caso ci sentiremo sul forum..ciaoooo :ciauz:

Angelo1974
31-08-2003, 12:19
Ops....piccolo errore di formattazione.... nel messaggio dove c'è la faccia che ride..... ci dovrebbe essere : Discover e non :Discover...
ciaoooo :ciauz:

Fra
31-08-2003, 15:00
Wow! Grazie Angelo.

Ormai mi sono convertito definitivamente a JAX (ho lasciato perdere APACHE -SOAP) xchè mi sto avvicinando ai Web Services (credo che JAX-RPC sia l'ideale).

Grazie ancora ... :)

Angelo1974
31-08-2003, 16:05
Allora andava bene? Meno male, pensavo di aver capito male il problema...cioa e buona giornata

Fra
31-08-2003, 18:06
Angelo, mi potresti chiarire un pò le idee ? :master:
Io vorrei realizzare un Client che dialoga con un Provider già fatto.
Il provider è Microsoft XMLA 1.1 ... vabbè questo non è molto importante, ciò che credo sia fondamentale è che esso dialoga tramite specifici messaggi SOAP (come quello postato sopra).
Negli esempi visti con SAAJ e JAX-RPC il Provider è sempre implementato in Java e gira su Tomcat.

Quindi la mia domanda è :

1)è possibile creare un client Java che dialoga con un provider non java e che non gira su Tomcat ma su IIS? Io credo di si (altrimenti SOAP che vantaggi da?)

2) Cosa ritieni debba usare SAAJ (JAXM) o JAX-RPC?
Dalle specifiche del protocollo del Provider Microsoft il dialogo dovrebbe iniziare sull'elaborazione di un documento WSDL ... ma andando sul sito della Microsoft è possibile scaricare il doc WSDL solo per VB.NET o per il toolkit (microsoft) di SOAP. Tutto ciò non è strano? ... WSDL dovrebbe essere uno standard svincolato dalla piattaforma.

Scusa se ti faccio un sacco di domande ma ho molti dubbi.

Angelo1974
01-09-2003, 10:42
Cia Fra...
secondo me è possibile utilizzare un client Java sebbene il provider non sia Java [ non so come si potrebbe fare ( è solo 1 settimana che sto studiando Java Web Service ) ma secondo me bisogna creare 1 connessione con quel provider ]; nella seconda domanda secondo dovresti fare 1 sorta di interrogazione del registro UDDI per capire che servizio c'è in ballo e come utilizzarlo...cmq cercherò di essere + chiaro in serata o al + domani sera perchè ora sono al lavoro e mi stanno un po' caricando :cry:
Ciaooooo :ciauz:

Loading