2.4. 已知的 CXF 问题


CEQ-5348 WS-SecurityPolicy, WS-Trust
当您将 WS-SecurityPolicyWS-Trust 与 Camel CXF 消费者搭配使用时,例如 from ("cxf:…​"),SOAP 端点会抛出以下异常:
SoapFault: BSP:R3227: A SECURITY_HEADER MUST NOT contain more than one TIMESTAMP

您可以使用与 Quarkiverse CXF 扩展相同的方法部署 SOAP 端点来解决此问题。

首先,您需要实施将您的消息转发到 Camel 路由的服务端点接口(SEI)。例如,如果您的 SEI 类似如下:

@WebService(targetNamespace = "https://quarkiverse.github.io/quarkiverse-docs/quarkus-cxf/ws-securitypolicy")
public interface WssSecurityPolicyHelloService {
    @WebMethod
    String sayHello(String name);
}

然后,您必须配置 SEI 的实现,如下所示:

@WebService(portName = "EncryptSecurityServicePort", serviceName = "WssSecurityPolicyHelloService", targetNamespace = "https://quarkiverse.github.io/quarkiverse-docs/quarkus-cxf/ws-securitypolicy", endpointInterface = "org.apache.camel.quarkus.component.cxf.soap.securitypolicy.server.cxf.way.it.WssSecurityPolicyHelloService")
public class WssSecurityPolicyHelloServiceImpl implements WssSecurityPolicyHelloService {
    @Inject
    ProducerTemplate producerTemplate;

    public String sayHello(String name) {
        return producerTemplate.requestBody("direct:myDirectEndpoint", name, String.class);
    }
}

接下来,在 application.properties 文件中,您必须配置服务的路径。例如:

quarkus.cxf.path=/soap
quarkus.cxf.endpoint."/security-policy-hello".implementor=org.apache.camel.quarkus.component.cxf.soap.securitypolicy.server.cxf.way.it.WssSecurityPolicyHelloServiceImpl

在本例中,您的 Camel 路由通常以 from ("cxf:bean:myCxfHelloEndpoint") 开头,它现在 从("direct:myDirectEndpoint") 开始。

CEQ-5286 MTOM Attachments: 在使用 AWT Image 参数调用 CXF 服务时 Unmarshalling Error

如果您的服务端点接口(SEI)在其任何方法签名中引用 java.awt.Image,则端点会抛出类似如下的错误:

  • {{Unmarshalling Error: unexpected element (uri:"", local:"arg0").预期的元素为(none)}}
  • unmarshalling Error: unexpected element (uri:"https://quarkiverse.github.io/quarkiverse-docs/quarkus-cxf/test/mtom-awt", local:"data")。预期的元素为(none)

您可以通过在请求或响应数据对象中嵌套 java.awt.Image 来解决此问题。例如,您可以将 SEI 配置为如下:

@WebService(name = "ImageService", targetNamespace = ImageService.NS)
@MTOM
public interface ImageService {
    public static final String NS = "https://quarkiverse.github.io/quarkiverse-docs/quarkus-cxf/test/mtom-awt";

    @WebMethod
    Image downloadImage(@WebParam(name = "name", targetNamespace = NS) String name);

    @WebMethod
    String uploadImage(String name, Image image);
}

要使用这个临时解决方案,您应该配置 SEI,如下所示:

@WebService(name = "ImageService", targetNamespace = ImageService.NS)
@MTOM
public interface ImageService {
    public static final String NS = "https://quarkiverse.github.io/quarkiverse-docs/quarkus-cxf/test/mtom-awt";

    @WebMethod
    ImageData downloadImage(@WebParam(name = "name", targetNamespace = NS) String name);

    @WebMethod
    String uploadImage(ImageData image);
}

@XmlType(name = "imageData", namespace = "http://org.jboss.ws/xop/doclit")
public class ImageData {
    private Image data;
    private String name;

    public ImageData() {
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Image getData() {
        return data;
    }

    public void setData(Image data) {
        this.data = data;
    }
}
在方法签名中包含带有 postped 初始化的类的 CEQ-4769 CXF 客户端无法编译到原生
当服务端点接口(SEI)的客户端在其任意方法中引用 java.awt.Image 时,应用程序无法编译到原生。这个问题还没有已知的临时解决方案,但您仍可在 JVM 模式中使用受影响的客户端。
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2026 Red Hat
返回顶部