我正在尝试通过扩展org.apache.catalina.valves.ValveBase
类来为Apache Tomcat创建自定义Valve。它有方法public abstract void invoke(Request request,Response response)
.在我的 Tomcat 容器中,我有 Axis2,它托管了一个 Web 服务。所以我的问题是找到一种使用此自定义阀将 SOAP 消息提取到该 Web 服务的方法。那么使用参数org.apache.catalina.connector.Request
和org.apache.connector.Response
获取 SOAP 消息的方法是什么?
由于自定义阀是在 Axis2 收到请求之前执行的,因此您将无法访问 Axis2 解析的 SOAP 消息。您唯一能做的是自己解析消息,然后将原始消息的副本传递给 Axis2(如果您的 valve 不修改消息)或重新序列化消息(如果您的 valve 修改了消息)。
请注意,与其他用户所说的相反,Axis2 文档中没有任何内容可以帮助您做到这一点。但是,根据您的使用案例(您没有足够详细地描述),您可以使用 Axis2 处理程序来实现您的目标。当然,Axis2 处理器在 Axis2 文档中进行了描述。
与你编写 Servlet 或过滤器时提取 SOAP 消息的方式相同:org.apache.catalina.connector.Request
实现HttpServletRequest
,org.apache.connector.Response
实现HttpServletResponse
,所以像往常一样使用它们。
如果您不知道如何从HttpServletRequest
中提取 SOAP 消息,则必须阅读 Axis2 文档。