gpt4 book ai didi

java - 使用 JAX-WS 提取整个 SOAP 消息

转载 作者:太空宇宙 更新时间:2023-11-04 07:58:57 24 4
gpt4 key购买 nike

我有一个 EJB 无状态 Bean Web 服务,并且希望访问整个 SOAP 消息,而不仅仅是我当前在参数中获取的 SOAP 主体。我想将消息提交到不同的组件。我正在使用 Spring 配置,但没有使用 Spring-WS。我遵循了本教程:

http://java.dzone.com/articles/creating-soap-message-handlers

保持原样,暂时没有进行任何更改。它只记录 SOAP 消息。 handleMessage() 没有被调用。

@Stateless
@WebService(portName = "XRequest_PortType", serviceName = "XRequestService", endpointInterface = "XRequestPortType")
@Addressing(enabled = true)
@HandlerChain(file = "LogMessage_handler.xml")
@Interceptors(SpringBeanAutowiringInterceptor.class)
public class XRequest_PortTypeWS implements
XRequestPortType {
...}

LogMessage_handler.xml 与教程略有不同,但我尝试了两种方法:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<javaee:handler-chains
xmlns:javaee="http://java.sun.com/xml/ns/javaee"
xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<javaee:handler-chain>
<javaee:handler>
<javaee:handler-class>com.test.ws.LogMessageHandle</javaee:handler-class>
</javaee:handler>
</javaee:handler-chain>
</javaee:handler-chains>

日志消息处理程序:

package com.test.ws;

import java.io.IOException;
import java.util.Collections;
import java.util.Set;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.xml.namespace.QName;
import javax.xml.soap.SOAPException;
import javax.xml.soap.SOAPMessage;
import javax.xml.ws.handler.MessageContext;
import javax.xml.ws.handler.soap.SOAPHandler;
import javax.xml.ws.handler.soap.SOAPMessageContext;

/**
*
* @author meerasubbarao
*/
public class LogMessageHandler implements SOAPHandler<SOAPMessageContext> {

public boolean handleMessage(SOAPMessageContext messageContext) {
log(messageContext);
return true;

}

public Set<QName> getHeaders() {
return Collections.EMPTY_SET;
}

public boolean handleFault(SOAPMessageContext messageContext) {
return true;
}

public void close(MessageContext context) {
}

private void log(SOAPMessageContext messageContext) {
SOAPMessage msg = messageContext.getMessage(); // Line 1
try {
msg.writeTo(System.out); // Line 3
} catch (SOAPException ex) {
Logger.getLogger(LogMessageHandler.class.getName()).log(
Level.SEVERE, null, ex);
} catch (IOException ex) {
Logger.getLogger(LogMessageHandler.class.getName()).log(
Level.SEVERE, null, ex);
}
}

}

这是否是获取整个 SOAP 消息的最佳方式?我仍然需要从 XRequest_PortTypeWS 调用 Spring bean 来发送 SOAP 消息。

最佳答案

我查过http://java.dzone.com/articles/creating-soap-message-handlers中的文章我注意到您没有在 LogMessage_handler.xml 中设置处理程序名称更重要的一件事是在同一个包中找到 LogMessage_handler.xmlWeb 服务 bean。另外请为 webservice bean 添加 @Remote 注解。

关于java - 使用 JAX-WS 提取整个 SOAP 消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13147961/

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