2010-04-10 3 views
9

Ho creato un WSDL per il mio servizio web. Mi piacerebbe sapere come chiamarlo da una pagina jsp dalla mia altra applicazione web.Come creare un client di servizi Web in una pagina .jsp?

Vorrei chiamare il servizio Web dal jsp .. ad esempio considerando che ho un servizio Web molto semplice che visualizzerebbe il testo inserito nella mia pagina index.jsp dopo aver fatto clic su invia, come dovrei usare l'URL wsdl chiamare il servizio web prendendo il valore del testo quando si fa clic su Invia.

/Vikram

risposta

0

come i dati sta raggiungendo la pagina di servlet Java?

JSON, XML?

se JSON, ho come consiglio di utilizzare jQuery , il metodo .get() è fantastico! E questo è il modo in cui utilizzo nelle mie pagine ASP ...

+0

sua xml e vorrebbe creare tutto sul mio IDE laboratorio weblogic – vikram

2

Stai parlando di chiamarlo dal browser o di chiamarlo dal JSP per eseguire il rendering di qualcosa nell'HTML inviato al browser? Questi sono problemi completamente diversi.

Se si sta parlando di chiamarlo da un browser, il suggerimento è di considerare il carico utile SOAP come un grande blob della piastra della caldaia XML. Quindi inserire le poche informazioni necessarie per distinguere la richiesta SOAP e quindi utilizzare XMLHttpRequest per inviare XML al server. Infine, si estrae il risultato dal payload di ritorno SOAP.

Se si desidera chiamare semplicemente il servizio Web da JSP, la soluzione migliore è quella di creare una classe wrapper di utilità che avvolga tutto l'impianto idraulico per effettuare la chiamata al servizio Web e quindi chiamare tale wrapper dal JSP utilizzando tecnica standard di Java.

Edit - rispondendo alla domanda

Quindi, in pratica si ha una pagina index.jsp con una casella di testo. Premi Invio, vuoi che il testo di quel invio sia inviato a un servizio web e il risultato visualizzato al browser.

Semplicemente, escludendo XHLHttpRequest, si desidera creare un client di servizio Web (utilizzando JAX-WS o Axis o uno degli altri kit di strumenti di servizio Web Java).

Quindi un Servlet o JSP accetta la richiesta POST dal modulo, estrae il testo dalla richiesta e quindi chiama il servizio Web. Alla fine restituirebbe il risultato al client (usando una JSP o qualsiasi altra cosa).

Non è possibile inviare un HTML direttamente a un servizio Web, i protocolli sono diversi.

Così

  text   text 
     | --> |   | ----> |    
     |  | Servlet |result | Web Service 
     |  |   | <---- | 
Browser |  |   | 
     |  |   | forward | 
     |  |   | ------> | JSP 
     |       | 
     | rendered result  | 
     | <---------------------- | 
+0

Grazie Will, vorrei chiamare il servizio Web dal jsp .. per esempio considerando che ho un servizio web molto semplice che mostrerebbe il testo inserito nella mia pagina index.jsp dopo aver fatto clic su invia, come dovrei usare l'URL wsdl per chiamare il servizio web prendendo il valore del testo quando si fa clic su submit. – vikram

5

Io davvero non consiglia di codifica alcun tipo di logica in una JSP, ivi compresa la richiesta di un servizio web, questa non è una buona pratica. JSP è una tecnologia di visualizzazione e dovrebbe essere utilizzato per la presentazione, non per la logica aziendale. Invece, è necessario inviare il modulo a un servlet, recuperare i parametri inviati, chiamare il servizio Web e quindi stampare i risultati in una vista JSP. Ma chiudiamo la parentesi.

Dal momento che hai citato WebLogic e Workshop in un commento, presumo che tu stia usando :) WebLogic supporta JAX-WS, quindi ti suggerisco di utilizzarlo per il tuo cliente.

Fondamentalmente, è necessario generare prima le "risorse utente del client" (ad esempio le classi che verranno utilizzate per richiamare il servizio Web). Un modo per farlo è utilizzare l'attività Ant clientgen. Fare riferimento a Invoking a Web Service from a Stand-alone Client: Main Steps per i dettagli (dovrebbe essere possibile generare le classi da Workshop ma non posso dirti come, non lo uso).

Una volta generate le risorse utente, chiamare il servizio Web è un gioco da ragazzi. Il codice sarà simile al seguente:

ComplexService test = new ComplexService(), 
ComplexPortType port = test.getComplexPortTypePort(); 

BasicStruct in = new BasicStruct(); 

in.setIntValue(999); 
in.setStringValue("Hello Struct"); 

BasicStruct result = port.echoComplexType(in); 
System.out.println("echoComplexType called. Result: " + result.getIntValue() + ", " + result.getStringValue()); 
Problemi correlati