2012-09-16 9 views
7

Utworzyłem usługę WWW przy użyciu JAX-WS w wersjach RSA 7.5 i Websphere 7, korzystając z podejścia oddolnego. Gdy otwieram WSDL w SOAP UI, to odcinek argumentów pojawia się tak:Zmiana nazwy argumentu w JAX-WS

<!--Optional--> 
<arg0> 
    <empID>?</empId> 
</arg0> 
<!--Optional--> 
<arg1> 
    <empName>?</empName> 
</arg1> 
<!--Optional--> 
<arg2> 
    <empAddress>?</empAddress> 
</arg2> 
<!--Optional--> 
<arg3> 
    <empCountry>?</empCountry> 
</arg3> 

Metoda usługa bierze ponad 4 elementy jak parametry, aby przywrócić dane pracownika.

1) Chcę zmienić nazwę tego arg0, arg1 i tak dalej z poprawnymi nazwami.

2) Chcę usunąć prezentację <!--optional--> powyżej znaczników arg. (Aby usunąć <!--optional--> z nazwy elementu, użyłem @XMLElement (required = true)). Ale nie jestem pewien, gdzie dokładnie aby skorzystać z tej adnotacji w tym przypadku :(

Proszę o pomoc.

Pozdrawiam,

Odpowiedz

12

można umieścić @XMLElement (wymagane = true) powyżej zmiennych w swojej klasie, która Właśnie dowiedziałem się o tej opcji około miesiąca temu, więc tuż nad tym, gdzie deklarujesz empName, umieść znacznik i wymagane:

Aby zmienić nazwę parametrów swojej usługi, użyj @WebParam (name = " ") przed każdą zmienną wejściową do usługi

Na przykład, jeśli masz metodę usługi o nazwie get (String name) to wyglądać Get (@WebParam (name = "nazwa") String name)


Masz rację, że teraz ja przeczytaj ponownie swój komentarz. Usługi, które obsługuję, używają obiektów w danych wejściowych i wyjściowych, dlatego też umieszczam znacznik XMLElement w klasie tych obiektów.

Musisz umieścić znacznik w klasie, która deklaruje zmienne, które są przekazywane lub zwracane do usługi. Jeśli zdarzy się, że zdarza się, że są zadeklarowane w twojej klasie usług, to jest w porządku. Najważniejsze jest to, że umieścisz ten znacznik XMLElement powyżej deklaracji zmiennej, w przeciwieństwie do umieszczania go na pobierającym lub ustawiającym.

Ten samouczek pokazuje kilka przykładów użycia. JAXB tutorial

+0

gdybym umieścić '@XMLElement (wymagane = true)' powyżej zmiennej członkiem EmpName, to będzie usunąć '<1 - opcja ->' obecny powyżej znacznika ? Myślę, że to nie będzie działać, muszę umieścić to gdzieś w samej klasie serwisowej, ponieważ arg0 jest przekazywane w samej usłudze. Wypróbowałeś to? Nie mam dostępnego systemu DEV nw, w przeciwnym razie mógłbym spróbować. Ale myślę, że spowoduje to usunięcie '' z empName, ale nie z '' – user182944

+1

Musisz umieścić znacznik required = true nad każdą zmienną w danych, więc wszystkie 4 w twoim przypadku. Świadczę usługi wsparcia i zawsze denerwowało mnie to w SoapUI, ponieważ mamy te znaczniki we wszystkich naszych zmiennych. Właśnie dowiedziałem się miesiąc temu, że użycie tagu XMLElement usunie opcjonalne tagi z tego, co generuje SoapUi. – Logan

+0

Dzięki za wszystkie informacje. Próbowałem twoich sugestii i większość z nich działała :) Czy możesz powiedzieć mi kilka rzeczy: 1) kiedy uruchomię obecny adres URL w WSDL dla sprawdzenia, czy usługa jest w górę, czy nie, wtedy dostaję komunikat: 'Hello! To jest serwis internetowy Axis2! "Moje pytanie brzmi, dlaczego pokazuje Axis2? Czy JAX-WS ma jakąkolwiek relację z Axis2? 2) Dzisiaj zaimplementowałem SOAPHandler dla mojej usługi internetowej. Użyłem adnotacji '@handlerchain (file =" filepath ")', a plik został umieszczony w folderze WebContent. Wyrzucił mi wyjątek. Ale umieszczenie go w pakiecie serwisowym działało dobrze. Czemu? – user182944