使用 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);
希望对您有所帮助。
我有一个使用 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);
希望对您有所帮助。