gpt4 book ai didi

java - 如何在 CXF 的 READ 阶段从 SoapMessage 中提取请求的操作名称?

转载 作者:太空宇宙 更新时间:2023-11-04 14:37:50 25 4
gpt4 key购买 nike

我有一个以下拦截器来记录请求的操作名称。

public class ServiceLogPreInterceptor extends AbstractSoapInterceptor {

public static Logger logger = LoggerFactory
.getLogger(ServiceLogPreInterceptor.class);

public ServiceLogPreInterceptor() {
super(Phase.READ);
addAfter(StartBodyInterceptor.class.getName());
addAfter(ReadHeadersInterceptor.class.getName());
addAfter(EndpointSelectionInterceptor.class.getName());
}

@Override
public void handleMessage(SoapMessage message) throws Fault {
// I need Requested Operation name here!!
String opName = getOperationName(message);

logger.debug(opName);
}

private String getOperationName(String msg) {
return "??????";
}

}

这是我的拦截器链

ServiceLogPreInterceptor(READ) -> AuthenticationInterceptor(SAAJInterceptor) -->authorizationInterceptor(PRE_INVOKE) --> 和实际方法调用

绑定(bind)操作信息在我的授权拦截器中可用
我的 ServiceLogPreInterceptor 中没有可用的绑定(bind)操作信息,并且我不知道如何以合理的方式从 SoapMessage 中提取操作名称:)。

最佳答案

我解决了这个问题。这是我的解决方案。

public BindingOperationInfo extractBindingOperationInfo(Message message) {
DepthXMLStreamReader xmlReader = getXMLStreamReader(message);
DataReader<XMLStreamReader> dr = getDataReader(message);
boolean client = isRequestor(message);
Exchange exchange = message.getExchange();
BindingOperationInfo bop = null;

Service service = ServiceModelUtil.getService(message.getExchange());

try {

Endpoint ep = exchange.get(Endpoint.class);
ServiceInfo si = ep.getEndpointInfo().getService();
Collection<OperationInfo> operations = null;
operations = new ArrayList<OperationInfo>();
operations.addAll(si.getInterface().getOperations());

if (xmlReader == null || !StaxUtils.toNextElement(xmlReader)) {
// empty input
bop = getBindingOperationForEmptyBody(operations, ep, exchange);
return bop;
}

setDataReaderValidation(service, message, dr);


QName elName = xmlReader.getName();
bop = findMessagePart(exchange, operations, elName, client,
message);

} catch (Fault f) {
if (!isRequestor(message)) {
f.setFaultCode(Fault.FAULT_CODE_CLIENT);
}
throw f;
}

return bop;
}

然后从bindigOperationInfo中提取方法。

关于java - 如何在 CXF 的 READ 阶段从 SoapMessage 中提取请求的操作名称?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25337408/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com