使用 Apache CXF 重命名 XML/SOAP 标签

Renaming an XML/SOAP tag using Apache CXF

我有一个使用 Apache CXF 作为实现的 SOAP 网络服务服务器。由于某些外部技术限制,我希望能够在入站 SOAP 请求中 重命名一些 XML 标记 命名操作参数(已弃用)。我正在阅读有关为此使用 Interceptors 的信息,但是关于如何 setup/configure 它们的文档不是很清楚。

我发布端点的代码如下:

Endpoint endpoint = Endpoint.create(
    "http://schemas.xmlsoap.org/soap/", new MyServer());
endpoint.publish("ws/endpoint");

理想情况下,我只想向给定端点添加过滤器(我有几个)。

Apache's documentations about interceptors are quite clear (IMO), anyway, there is a helloworld project (based on spring boot, cxf and maven) in my github profile 你可以看看设置拦截器(实际上它是一个基本的自动拦截器)。

为了设置拦截器(例如 InInterceptor),您的 class 应该扩展 AbstractPhaseInterceptor<Message> 并覆盖 handleMessage(Message message) 方法,然后在构造函数中您应该声明 phase其中拦截器将被应用。最后你必须实例化它并在端点上应用。

如你所说:

rename some XML tags naming an operation parameter (which are deprecated) in the inbound SOAP request

我认为操作参数的名称(在 WSDL 文件中)与您的 Web 方法的参数有所不同。假设您的端点中有一个名为 addPerson:

的方法
@WebMethod
String addPerson(Person person) {
    /*method logic*/
}

和人 class:

class Person {
    private String firstName;
    private String lastName;
    private Date birthDate;
    //getters and setters
}   

为了将 lastName 属性 映射到不同的名称,您必须使用

对其进行注释
@XmlElement(name = "sureName")
private String lastName;

应用此注释后,sureName(在 wsdl 文件中)将映射到 lastName

此外,还有@WebParam注解可用于更改网络方法参数的名称:

@WebMethod
String sayHello( @WebParam(name = "sureName") String lastName);

希望对您有所帮助。