当前位置: 首页 > 知识库问答 >
问题:

从cxf enpoint获取“策略替代方案无法满足”

邵绪
2023-03-14

我从wsdl中使用cxf和camel创建了一个web服务。下面是我的bean配置:

@Bean
open fun cxfServlet(): ServletRegistrationBean<CXFServlet> {
    val servlet = ServletRegistrationBean(CXFServlet(), "/ws/*")
    servlet.setLoadOnStartup(1)
    servlet.setName("cxfServlet")
    return servlet
}

@Bean
open fun cxf(): Bus {
    return BusFactory.newInstance().createBus()
}

@Bean("endpoint")
open fun endpoint(bus: Bus): CxfEndpoint {
    val endpoint = CxfEndpoint()
    endpoint.address = "/endpoint"
    endpoint.serviceClass = IWebService::class.java
    endpoint.wsdlURL = "wsdl/mywsdl.wsdl"
    endpoint.dataFormat = DataFormat.POJO
    endpoint.bindingId = SOAPBinding.SOAP11HTTP_BINDING
    endpoint.isLoggingFeatureEnabled = true
    endpoint.loggingSizeLimit = -1
    return endpoint
}

我还配置了ssl。我使用springBoot,我的属性文件是:

服务器端口=8442安全。需要ssl=true服务器。ssl。密钥存储类型=PKCS12服务器。ssl。密钥存储=类路径:密钥存储。p12服务器。ssl。密钥存储密码=123456服务器。ssl。密钥别名=testalias

服务的wsdl位于以下地址:

https://localhost:8442/ws/endpoint?wsdl

在我使用带有块“策略”的WSDl之前,它一直运行良好:

<wsp:Policy wsu:Id="id">
    <wsp:ExactlyOne>
        <wsp:All>
            <sp:TransportBinding xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
                <wsp:Policy>
                    <sp:TransportToken>
                        <wsp:Policy>
                            <sp:HttpsToken RequireClientCertificate="false"/>
                        </wsp:Policy>
                    </sp:TransportToken>
                    <sp:AlgorithmSuite>
                        <wsp:Policy>
                            <sp:Basic256/>
                        </wsp:Policy>
                    </sp:AlgorithmSuite>
                    <sp:Layout>
                        <wsp:Policy>
                            <sp:Strict/>
                        </wsp:Policy>
                    </sp:Layout>
                </wsp:Policy>
            </sp:TransportBinding>
        </wsp:All>
    </wsp:ExactlyOne>
</wsp:Policy>

现在应用程序运行正确,但当我发送消息时会出现异常:

组织。阿帕奇。cxf。ws。政策PolicyException:无法满足这些策略选项:
{http://schemas.xmlsoap.org/ws/2005/07/securitypolicy}TransportToken{http://schemas.xmlsoap.org/ws/2005/07/securitypolicy}HttpsToken公司{http://schemas.xmlsoap.org/ws/2005/07/securitypolicy}算法套件{http://schemas.xmlsoap.org/ws/2005/07/securitypolicy}基本256{http://schemas.xmlsoap.org/ws/2005/07/securitypolicy}布局
{http://schemas.xmlsoap.org/ws/2005/07/securitypolicy}严格

但是如果我在soapUI中创建服务器,它可以正常工作。
我尝试了一些关于从stackoverflow创建拦截器和其他的建议,但没有任何改变。我如何解决这个问题?

共有2个答案

孙自怡
2023-03-14

实际上,我通过使用IgnorablePolicyInterceptorProvider找到了某种解决方案。但据我所知,这只是忽视了政策,我认为这不是一个真正的解决方案:

val reg = bus.getExtension(PolicyInterceptorProviderRegistry::class.java)
val set = HashSet<QName>()
set.add(QName("http://schemas.xmlsoap.org/ws/2005/07/securitypolicy", "TransportBinding"))
set.add(QName("http://schemas.xmlsoap.org/ws/2005/07/securitypolicy", "TransportToken"))
set.add(QName("http://schemas.xmlsoap.org/ws/2005/07/securitypolicy", "HttpsToken"))
set.add(QName("http://schemas.xmlsoap.org/ws/2005/07/securitypolicy", "AlgorithmSuite"))
set.add(QName("http://schemas.xmlsoap.org/ws/2005/07/securitypolicy", "Basic256"))
set.add(QName("http://schemas.xmlsoap.org/ws/2005/07/securitypolicy", "Layout"))
set.add(QName("http://schemas.xmlsoap.org/ws/2005/07/securitypolicy", "Strict"))
reg.register(IgnorablePolicyInterceptorProvider(set))
江洲
2023-03-14

您的Webservice是否受到SSL的保护?该错误抱怨WSDL中声明的安全策略未得到满足。

请注意,WSDL策略断言没有设置请求者和提供者之间的HTTPS传输!它们仅确保在调用具有已定义策略的web服务时,所声明的机制处于适当位置。

对于SoapUI,我真的不知道,但我假设它忽略了策略。

 类似资料:
  • 我正在为https://efactura.dgi.gub.uy:6470/eprueba/ws_personagetactempresarialprueba?wsdl第三方WSDL实现一个webservice客户机。 我使用apache-cxf3.0.4wsdl2java生成java clases。 我需要如何解决这个错误?

  • 问题内容: 以前,我总是以为Vector在长度未知的情况下可以很好地用于非描述对象。据我所知,我也认为它也是线程安全的 有什么改变不应该再使用了,替代方案是什么? 问题答案: 您应该使用而不是。虽然使用了内部同步,但是对于实际的一致性而言,这很少够用,只会在真正不需要时降低执行速度。 另请参阅此stackoverflow问题。

  • 这是我第一次尝试无痛脚本,但是几乎每个示例都使用“state”对象,这在我的版本中不可用。 即 导致:变量[state]未定义。 省略它也没有帮助 结果为:“变量[id_map]未定义。”在map_script部分 早期版本的替代方法是什么?

  • 问题内容: 使用hibernate实现联合查询,我必须采取什么替代方法?我知道hibernate状态目前不支持联合查询,现在我看到的建立联合的唯一方法是使用视图表。 另一个选择是使用普通的jdbc,但是这样一来,我将失去所有示例/条件查询功能,以及hibernate对表/列执行的hibernate映射验证。 问题答案: 使用hibernate实现联合查询,我必须采取什么替代方法?我知道hibern

  • 目前,Android的EditText在处理大量文本行(10000行)时速度非常慢。这种放缓似乎部分是由于EditText支持跨度,主要是由于EditText正在计算每行的宽度,这非常昂贵。EditText有什么更快的替代品,或者优化它以使其可用的方法吗? 编辑:方法跟踪如下:

  • 问题内容: 出于各种原因,在编写 Java应用程序时 ,调用会被皱眉,所以如何通知调用过程并非一切都按计划进行? 编辑: 1是任何非零退出代码的。 问题答案: 当“应用程序”实际上是较大的Java应用程序(服务器)的子应用程序(例如servlet,applet)时,对的使用会被拒绝:在这种情况下,它可能会停止JVM并因此停止所有其他子应用程序。在这种情况下,抛出适当的异常(最好由应用程序框架/服务