Comportamentul s-a modificat în WebSphere Application Server V8 cu privire la felul în care este determinată setarea SOAP Action pentru mesajele de ieşire pentru clienţii JAX-WS Dispatch. În ediţiile mai vechi de V8, dacă nu este furnizată o acţiune SOAP de către aplicaţia client Dispatch, mediul runtime JAX-WS nu trimite acţiunea SOAP corectă pentru mesajul de ieşire. În loc de aceasta, setează acţiunea la o operaţie anonimă. Acum, în V8, dacă nu este furnizată acţiunea SOAP de către aplicaţia client, mediul runtime JAX-WS parsează mesajul de ieşire pentru a determina ce operaţiune este invocată şi utilizează acest rezultat pentru a stabili valoarea corespunzătoare pentru SOAP Action.
Această regulă semnalează apelurile pentru crearea unui client Dispatch când:
Cele mai bune practici pentru WebSphere Application Server tradiţional şi Liberty recomandă ca aplicaţia client să furnizeze o acţiune SOAP cu proprietăţile JAX-WS SOAPACTION_USE_PROPERTY şi SOAPACTION_URI_PROPERTY din javax.xml.ws.BindingProvider. Va fi utilizată acţiunea SOAP furnizată şi nu se va realiza parsarea mesajului de ieşire, indiferent de setarea proprietăţii DISPATCH_CLIENT_OUTBOUND_RESOLUTION.
Acesta este un exemplu de cod conform celor mai bune practici, cu setarea SOAP Action pentru contextul cererii. Dacă SOAPACTION_URI_PROPERTY nu este setată sau dacă SOAPACTION_USE_PROPERTY este setată la false, această regulă va semnala apelul metodei createDispatch().
Exemplu:|
//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"); |
Deoarece această parsare poate fi costisitoare, poate fi setată o proprietate pentru WebSphere Application Server tradiţional la nivelul Sistem (pentru ca parsarea să fie întotdeauna dezactivată) sau pentru JAX-WS Request Message Context (pentru ca parsarea să fie dezactivată per mesaj). Dacă este dezactivată parsarea, acţiunea SOAP din mesajul de ieşire va fi setată în continuare la o operaţie anonimă, ca înainte. Proprietatea de dezactivare este definită prin constanta org.apache.axis2.jaxws.Constants.DISPATCH_CLIENT_OUTBOUND_RESOLUTION cu valoarea şir jaxws.dispatch.outbound.operation.resolution.enable. Dacă proprietatea nu este setată, aceasta este interpretată ca şirul true, activând rezoluţia operaţiei de ieşire. Prin setarea proprietăţii la false rezoluţia operaţiei de ieşire va fi dezactivată.
Pentru informaţii suplimentare, vedeţi: