2010-04-10 20 views
9

Utworzono plik WSDL dla mojej usługi internetowej. Chciałbym wiedzieć, jak nazwać to ze strony jsp z mojej innej aplikacji internetowej.Jak utworzyć klienta usługi WWW na stronie .jsp?

Chciałbym zadzwonić do usługi sieciowej z jsp. Na przykład biorąc pod uwagę, że mam bardzo prostą usługę internetową, która wyświetlałaby tekst wpisany na mojej stronie index.jsp po kliknięciu submit, w jaki sposób użyć adresu URL pliku wsdl aby wywołać usługę WWW przyjmującą wartość tekstową po kliknięciu przycisku Wyślij.

/Vikram

Odpowiedz

0

Jak dane są osiągnięciem strony serwletu Java?

JSON, XML?

jeśli JSON, ja jak zalecamy używanie jQuery, metoda .get() jest fantastyczne! I tak właśnie używam w moich stronach ASP ...

+0

jego xml i chciałby stworzyć wszystko na moim IDE warsztatowej WebLogic – vikram

2

Mówisz o wywołanie go z przeglądarki, lub wywołanie go z JSP, aby uczynić coś w HTML wysyłany do przeglądarki? To są zupełnie inne problemy.

Jeśli mówisz o wywołaniu tego z przeglądarki, najlepszym rozwiązaniem jest potraktowanie ładunku SOAP jako duży obszar blachy kotła XML. Następnie podaj kilka informacji niezbędnych do rozróżnienia żądania SOAP, a następnie użyj XMLHttpRequest, aby wysłać XML do serwera. Na koniec wyciągasz wynik z ładunku powrotnego SOAP.

Jeśli chcesz po prostu wywołać usługę sieciową z poziomu JSP, najlepiej jest utworzyć klasę opakowania narzędzia, która otoczy całą instalację hydrauliczną i wywoła usługę sieci Web, a następnie wywoła to opakowanie z poziomu strony JSP przy użyciu standardowa technika Java.

Edit - odpowiadając na pytanie

Więc w zasadzie masz stronę index.jsp z pola tekstowego. Dostałeś zgłoszenie, chcesz, aby tekst tego zgłoszenia został wysłany do usługi internetowej, a wynik wyświetli się w przeglądarce.

Po prostu za pomocą polecenia XHLHttpRequest należy utworzyć klienta usługi WWW (przy użyciu JAX-WS lub Axis lub dowolnego innego zestawu narzędzi serwisowych Java Web Service).

Wtedy masz Servlet lub JSP wziąć żądanie POST z formularza, wyodrębnić tekst z wniosku, a wtedy byłoby wezwać serwis internetowy. W końcu renderowałby wynik do klienta (używając strony JSP lub czegoś podobnego).

Nie można POST HTML bezpośrednio do usługi sieci Web, protokoły są różne.

Więc

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

Dzięki Will, chciałbym wezwać serwis internetowy z JSP .. na przykład rozważa mam bardzo prosta usługa sieciowa, która wyświetlałaby tekst wpisany na stronie index.jsp po kliknięciu submit, w jaki sposób użyć adresu URL pliku wsdl do wywołania usługi internetowej przyjmującej wartość tekstową po kliknięciu przycisku submit. – vikram

5

Naprawdę nie polecam kodowania jakiejkolwiek logiki w JSP, w tym wywołanie usługi WWW, to nie jest to dobra praktyka. JSP to technologia widoku i powinna być używana do prezentacji, a nie do logiki biznesowej. Zamiast tego należy przesłać formularz do serwletu, pobrać przesłane parametry, zadzwonić do serwisu WWW, a następnie wydrukować wyniki w widoku JSP. Ale zamknijmy nawias.

Skoro wspomniałeś WebLogic i warsztaty w komentarzu, będę zakładać, że używasz ich :) WebLogic obsługuje JAX-WS więc sugeruję używanie go do klienta.

Najpierw należy wygenerować "artefakty klienta" (tj. Klasy używane do wywołania usługi internetowej). Jednym ze sposobów, aby to zrobić, jest użycie zadania Ant z numerem clientgen. Zapoznaj się z Invoking a Web Service from a Stand-alone Client: Main Steps, aby uzyskać szczegółowe informacje (powinno być możliwe generowanie klas z Workshop, ale nie mogę ci powiedzieć, jak, nie używam go).

Po wygenerowaniu artefaktów klienta wywoływanie usługi internetowej to bułka z masłem. Kod ten będzie podobny do poniższego:

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()); 
Powiązane problemy