Ez a viselkedés a WebSphere Application Server 8 változatban a SOAP Action beállítás megállapítási módjának tekintetében változott a JAX-WS Dispatch ügyfelek kimenő üzeneteiben. A V8 előtti kiadásokban, ha a Dispatch ügyfélalkalmazás nem adott meg SOAP műveletet, akkor a JAX-WS futási környezet nem a helyes SOAP műveletet küldte a kimenő üzenetben. Helyette anonim műveletet állított be. Most a 8 változatban, ha a SOAP Action beállítást az ügyfélalkalmazás nem adja meg, akkor a JAX-WS futási környezet értelmezi a kimenő üzenetet, hogy megállapítsa a hívott műveletet és azt használja a SOAP Action megfelelő értékének megállapításához.
Ez a szabály a Dispatch ügyfél létrehozására vonatkozó hívásokat akkor jelöli meg, ha:
hagyományos WebSphere Application Server és Liberty esetén a legjobb kódolási gyakorlat a SOAP művelet megadása a JAX-WS javax.xml.ws.BindingProvider tulajdonságokkal (SOAPACTION_USE_PROPERTY és SOAPACTION_URI_PROPERTY). A megadott SOAP művelet lesz felhasználva és nem kerül sor a kimenő üzenet értelmezésére, tekintet nélkül a DISPATCH_CLIENT_OUTBOUND_RESOLUTION tulajdonság beállítására.
Ez a példa a követendő kódot mutatja be, ahol a SOAP művelet a kérés kontextusában van beállítva. Ha a SOAPACTION_URI_PROPERTY nincs beállítva vagy ha a SOAPACTION_USE_PROPERTY false értékre van beállítva, akkor a createDispatch() metódus hívását jelezni fogja a szabály.
Példa:|
//Create a dispatch instance Dispatch<SOAPMessage> dispatch = service.createDispatch(portName, SOAPMessage.class, Service.Mode.MESSAGE); // Use Dispatch as BindingProvider BindingProvider bp = (BindingProvider) dispatch; // Configure RequestContext to send SOAPAction HTTP Header Map<String, Object> rc = bp.getRequestContext(); rc.put(BindingProvider.SOAPACTION_USE_PROPERTY, Boolean.TRUE); rc.put(BindingProvider.SOAPACTION_URI_PROPERTY, "hello"); |
Mivel az értelmezés költséges lehet, a hagyományos WebSphere Application Server kiszolgálón egy Rendszer szintű tulajdonság beállításával az értelmezés végleg, a JAX-WS kérésüzenet kontextusában pedig üzenetenkénti alapon letiltható. Ha az értelmezés tiltott, akkor a SOAP Action beállítás a kimenő üzenetben továbbra is anonim műveletre lesz beállítva, ahogyan korábban. A letiltást végző tulajdonság konstansként (org.apache.axis2.jaxws.Constants.DISPATCH_CLIENT_OUTBOUND_RESOLUTION) van megadva jaxws.dispatch.outbound.operation.resolution.enable karaktersorozat értékkel. Ha a tulajdonság nincs beállítva, akkor true karaktersorozatként lesz értelmezve, ami engedélyezi a kimenő művelet feloldást. A tulajdonság false értékre törtnő beállítása letiltja a kimenő művelet feloldást.
További információkért lásd: