当前位置: 首页 > 面试题库 >

Apache CXF-无法满足任何其他政策选择

邹英发
2023-03-14
问题内容

我正在尝试创建第三方WS的客户端。我的应用程序在JBoss AS 6(及其Apache CXF
2.3.1堆栈)上运行。我通过wsconsume(wsdl2java)生成了客户端代码。当我尝试连接到WS时,出现异常:

No assertion builder for type http://schemas.microsoft.com/ws/06/2004/policy/http}BasicAuthentication registered. 
Exception in thread "main" org.apache.cxf.ws.policy.PolicyException: None of the policy alternatives can be satisfied.

WSDL的Auth部分如下所示:

<wsp:Policy wsu:Id="abc_ssl_policy">
    <wsp:ExactlyOne>
        <wsp:All>
            <http:BasicAuthentication
                xmlns:http="http://schemas.microsoft.com/ws/06/2004/policy/http" />
            <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>

客户代码:

@WebServiceClient(name = "Abc", 
              wsdlLocation = "https://hiddendomain.com/abc/abc.svc?wsdl",
              targetNamespace = "http://tempuri.org/")                  
public class Abc extends Service {

public final static URL WSDL_LOCATION;

public final static QName SERVICE = new QName("http://tempuri.org/", "Abc");
public final static QName AbcSsl = new QName("http://tempuri.org/", "abc_ssl");
static {

    Authenticator.setDefault(new Authenticator() {
        @Override
        protected PasswordAuthentication getPasswordAuthentication() {
            return new PasswordAuthentication("user", "pas".toCharArray());
        }

    });

    URL url = null;
    try {
        url = new URL("https://hiddendomain.com/abc/abc.svc?wsdl");

    } catch (MalformedURLException e) {
        java.util.logging.Logger.getLogger(DistrInfo.class.getName())
            .log(java.util.logging.Level.INFO, 
                 "Can not initialize the default wsdl from {0}", "...");
    }
    WSDL_LOCATION = url;
}

我尝试获取导管时抛出异常:

    Client client = ClientProxy.getClient(port);
    HTTPConduit con = (HTTPConduit) client.getConduit(); <- exception

我怀疑这是由于非标准的MS政策所致,我需要适当的Intercerptor来处理此政策,但是有人可以向我展示一种方法吗?

我什至没有,我应该将HTTPS凭据放在auth(我无法获取管道)中


问题答案:

当我使用以下代码时,问题消失了:

import org.apache.cxf.endpoint.Client;
import org.apache.cxf.frontend.ClientProxy;
import org.apache.cxf.jaxws.JaxWsProxyFactoryBean;
import org.apache.cxf.transport.http.HTTPConduit;

...

JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean();

//factory.getInInterceptors().add(new LoggingInInterceptor());
//factory.getOutInterceptors().add(new LoggingOutInterceptor());

factory.setServiceClass(IAbc.class);
factory.setAddress("https://hiddendomain.com/abc/abc.svc/soap"); <- must be /soap there, otherwise 404

IAbc info = (IAbc) factory.create();

Client client = ClientProxy.getClient(info);
HTTPConduit http = (HTTPConduit) client.getConduit();

http.getAuthorization().setUserName("user");
http.getAuthorization().setPassword("pass");

String abc = info.abc();


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

  • 问题内容: 我想利用Google Maps OnlocationChangeListener,但是因为我已经实现了 并且由于需要保持上述实现,这使得实现OnlocationChangeListener非常困难。目前,代码也进行了 扩展,而我当前的代码又产生了更多问题。 问题是: 由于已经实现和扩展,我无法扩展或实现任何其他功能。这意味着我无法让OnlocationChangeListener工作

  • 我从wsdl中使用cxf和camel创建了一个web服务。下面是我的bean配置: 我还配置了ssl。我使用springBoot,我的属性文件是: 服务器端口=8442安全。需要ssl=true服务器。ssl。密钥存储类型=PKCS12服务器。ssl。密钥存储=类路径:密钥存储。p12服务器。ssl。密钥存储密码=123456服务器。ssl。密钥别名=testalias 服务的wsdl位于以下地址

  • 我需要更改我的AWS S3 bucket CORS策略,以便能够将我的ReactJS的文件上载到AWS S3,但我一直收到以下API响应: 应为参数。公司配置。CORSRules是一个数组。 我现在不知所措。有人能帮忙吗?

  • A task is special because knowing when a task is about to exit is useful in these circumstances: Frameworks know when to render the UI. Measuring enter/leave allows knowing total script/task time. Exi

  • 引言 小牛知识库(以下或称“我们”)非常重视您的隐私保护,您在使用我们的业务平台(xnip.cn)的产品和服务时,我们可能会收集和使用您的相关信息。我们希望通过本《隐私政策》向您说明,我们如何收集、使用、存储及共享您的个人信息,以及您如何访问、更新、控制和保护您的个人信息。 本《隐私政策》与您使用我们的服务关系紧密,希望您仔细阅读并理解,做出您认为适当的选择。您使用或继续使用我们的服务,即意味着您