Я пишу клиент для веб-службы, и я хочу сделать две вещи, используя interceptor - 1) Запишите исходящее XML-сообщение и 2) Прочитайте ответ HTTP, а не ответ SOAP ,Перехватчик CXF не вызван для чтения ответа HTTP
Сопровождающая сторона имеет только метод void, и они просто подтверждают получение моего сообщения через код ответа HTTP.
Это то, что их реакция выглядит следующим образом:
HTTP/1.1 202 Accepted
Date: Wed, 10 Jul 2013 23:06:36 GMT
Server: Oracle-Application-Server-11g
Content-Length: 0
X-ORACLE-DMS-ECID: 004sJ1KLm7yB_6RjMX^QsA0002X30001U5
X-Powered-By: Servlet/2.5 JSP/2.1
Content-Type:
Content-Language: en
X-F5-ServerSSL-Profile: serverssl_sys_soaorexafun
X-F5-ForwardProxy-Host: 64.181.184.15%819 443
мне нужен ответ "HTTP/1.1 202 Принято".
Мой перехватчик код:
package com.cambiahealth.orservice.client;
import org.apache.cxf.binding.soap.interceptor.EndpointSelectionInterceptor;
import org.apache.cxf.binding.soap.interceptor.ReadHeadersInterceptor;
import org.apache.cxf.interceptor.Fault;
import org.apache.cxf.message.Message;
import org.apache.cxf.phase.AbstractPhaseInterceptor;
import org.apache.cxf.phase.Phase;
import org.apache.log4j.Logger;
public class CoverOregonServiceInterceptor extends AbstractPhaseInterceptor<Message> {
static Logger logger = Logger.getLogger(CoverOregonServiceInterceptor.class.getName());
private static Integer responseCode = 0;
public CoverOregonServiceInterceptor() {
super(Phase.POST_INVOKE);
addAfter(ReadHeadersInterceptor.class.getName());
addAfter(EndpointSelectionInterceptor.class.getName());
}
@Override
public void handleMessage(Message message) throws Fault {
try{
responseCode = (Integer) message.get(Message.RESPONSE_CODE);
logger.info("Response Code is " + responseCode);
} catch (Exception e){
logger.error("Failed to read the response code from Soap message", e);
}
}
public Integer getResponseCode(){
return responseCode;
}
}
И код в моем клиенте:
String wsdlUrl = coverOregonServiceUrl + "?wsdl";
CoverOregonServiceInterceptor interceptor = new CoverOregonServiceInterceptor();
CoverOregonServiceInterceptor outInterceptor = new CoverOregonServiceInterceptor();
InboundEnrollmentManagementClient client = new InboundEnrollmentManagementClient(
new URL(wsdlUrl));
InboundEnrollManagementPortType port = client.getInboundEnrollManagementPort();
Client cxfClient = ClientProxy.getClient(port);
cxfClient.getInInterceptors().add(interceptor);
cxfClient.getOutFaultInterceptors().add(outInterceptor);
port.statusupdate(request);
Однако мой перехватчик не получает вызова/срабатывает на всех. Я пробовал разные фазы - ЧИТАТЬ, ПОЛУЧИТЬ, PRE_INVOKE, POST_INVOKE, INVOKE, POST_STREAM, SEND. Но никто из них не работал. Я попробовал аналогичный перехватчик для регистрации XML-сообщения перед отправкой запроса. И он тоже не работает. Какие-либо предложения?
Вы пробовали с PRE_STREAM (как org.apache.cxf.interceptor.LoggingOutInterceptor делает) – willome
PRE_STREAM работал в лесозаготовительной перехватчик для получения сообщения XML. Благодарю. – rishi