2010-01-26 17 views
5

Mam usługę sieciową wygenerowaną przez program wsgen za pośrednictwem programu maven. Po wdrożeniu usługi Glassfish umieszcza adres URL serwera w WSDL. Nasz serwer Glassfish jest obsługiwany przez serwer proxy Apache.Zastąp wartość generowanego adresu usługi WSDL usługi Glassfish

Co to wszystko znaczy, gdy ktoś ma dostęp naszą WSDL i patrzy na końcowym usług i lokalizacja adres mydło widzą to

http://app server url/service... 

zamiast

http://proxy server url/service... 

Chyba potrzebuję trochę wyjaśnień na kilka pozycji ...

  1. Czy ten adres punktu końcowego jest ważny? Czy klienci będą mogli nadal działać, jeśli adres punktu końcowego nie pasuje do adresu URL serwera proxy, który będą wywoływać w celu wywołania usługi. To zasadniczo zadaje pytania "jest WSDL do usługi internetowej jako interfejs jest do obiektu".

    UPDATE: W odpowiedzi na to pytanie pierwsze wydaje się, że "WSDL do serwisu WWW jako interfejs jest sprzeciw". Adres punktu końcowego określony w pliku WSDL nie jest ważny. W rzeczywistości stosunkowo proste jest wywoływanie operacji usługi sieci Web na innym punkcie końcowym niż ten określony w dokumencie WSDL as described here.

     
    // Create service and proxy from the generated Service class. 
    HelloService service = new HelloService(); 
    HelloPort proxy = service.getHelloPort(); 
    
     
    // Override the endpoint address 
    ((BindingProvider)proxy).getRequestContext().put(
         BindingProvider.ENDPOINT_ADDRESS_PROPERTY, 
         " http://new/endpointaddress "); 
    proxy.sayHello("Hello World!"); 
    

  2. WSDL jest generowany automatycznie, gdy wdrożyć do GlassFish. Czy istnieje prosty sposób na przesłonięcie tego wygenerowanego adresu końcowego w Glassfish poprzez ustawienie serwera aplikacji. Jeśli tak, mogę utworzyć ustawienie automatycznego umieszczania adresu URL serwera proxy w wygenerowanym pliku WSDL.

Jeżeli 1 jest rzeczywiście ważne i nie możemy zastąpić go w żaden sposób z 2, to w zasadzie oznacza, że ​​musimy zrobić oddzielny buduje dla rozwoju i produkcji. To nie "czuje się dobrze", ponieważ wydaje mi się, że jedyną rzeczą, którą powinniśmy zrobić, aby wdrożyć na innym serwerze, jest upuszczenie istniejącej (i przetestowanej) wojny z jednego środowiska na nowy serwer.

Odpowiedz

4

Okazuje się, że jest Server Name parametr na HTTP Listener, gdzie usługa jest wdrożona. Możesz określić tę wartość z konsoli administracyjnej Glassfish, a Glassfish użyje tej nazwy zamiast nazwy hosta w adresie URL żądania.

Niestety ten parametr nie pozwala na zastąpienie portu lub protokołu (http na https), jeśli serwer aplikacji i serwer proxy nie używają tych samych (nasze nie).

To, co zrobiłem, to write a simple servlet filter za moją usługę, aby sobie z tym poradzić.

3

Odkryłem coś, co uważam za bardzo prosty sposób rozwiązania problemu: użyj mod_substitute w Apache. Ponieważ ci z nas z tym problemem już używają Apache, a jest on wbudowany i prosty, najbardziej podobało mi się to podejście.

umieścić blok podobny do dołu w jednym z moich plików conf Apache i znalazł radość:

<Location /> 
    AddOutputFilterByType SUBSTITUTE text/xml 
    Substitute "s|http://internal:8080/xxx|https://external/xxx|ni" 
</Location>