Question

J'ai un service Web généré par wsgen par Maven. Quand je Déployez le service GlassFish il place l'URL du serveur dans le WSDL. Notre serveur Glassfish est entouré par un serveur proxy Apache.

Qu'est-ce que tout cela signifie est quand quelqu'un accède à notre WSDL et regarde le point de terminaison de service et l'emplacement d'adresse de savon qu'ils voient est

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

au lieu de

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

Je suppose que j'ai besoin des éclaircissements sur quelques points ...

  1. Cette adresse est de critère d'évaluation important? Les clients seront toujours en mesure de fonctionner si l'adresse de point final ne correspond pas à l'URL du serveur proxy qu'ils appelleront pour appeler le service. Cela demande essentiellement aux questions " est WSDL au service Web comme interface à l'objet ".

      

    Mise à jour: En réponse à cette première question, il semble que " WSDL au service Web comme interface à l'objet ". L'adresse de point de terminaison spécifié dans le WSDL est pas important. En fait, il est relativement trivial d'appeler une opération de service Web sur un point final différent de celui spécifié dans le WSDL comme décrit ici .

    // 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. Le WSDL est généré automatiquement lorsque nous déployons pour Glassfish. Y at-il un moyen facile de remplacer cette adresse de noeud final généré en Glassfish par un paramètre de serveur d'applications. Si oui, je peux créer un paramètre pour placer automatiquement l'URL du serveur proxy dans le WSDL généré.

Si 1 est en effet important et nous ne pouvons pas passer outre en aucune façon avec 2, cela signifie essentiellement que nous aurons besoin de faire builds distincte pour le développement et la production. Cela ne veut pas « se sentir bien », comme il me semble que la seule chose que nous devrions avoir besoin de faire pour déployer sur un autre serveur est de déposer une guerre existante (et testé) d'un environnement sur le nouveau serveur.

Était-ce utile?

La solution

Il se trouve qu'il est un paramètre Server Name sur le HTTP Listener où le service est déployé. Vous pouvez spécifier cette valeur à partir de la console d'administration Glassfish et Glassfish utiliserez ce nom plutôt que le nom d'hôte dans l'URL de la requête.

Malheureusement, ce paramètre ne vous permet pas de passer outre le port ou le protocole (http https) si votre serveur d'applications et le serveur proxy ne pas utiliser les mêmes (les nôtres ne le font pas).

Ce que j'ai été à la place écrire un simple filtre de servlet pour mon service à gérer pour moi.

Autres conseils

J'ai découvert ce que je considère être un moyen très simple de traiter la question: utiliser mod_substitute dans Apache. Étant donné que ceux d'entre nous à ce problème sont déjà en utilisant Apache, et il est construit et simple, je l'ai aimé cette approche mieux.

Je mis un bloc similaire à celui ci-dessous dans l'un de mes fichiers de configuration Apache et trouvé la joie:

<Location />
   AddOutputFilterByType SUBSTITUTE text/xml
   Substitute "s|http://internal:8080/xxx|https://external/xxx|ni"
</Location>
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top