标签: cxf

用于动态端点的Apache CXF客户端

我现在使用Apache CXF作为.NET服务的Web服务客户端来绕过NTLM身份验证.它工作得很好,但我想知道为什么我似乎无法设置Web服务目标端点.CXF似乎在运行时希望WSDL出于某种奇怪的原因 - 不确定.它需要来自WSDL的物理端点,我认为它在测试环境中工作正常,但在部署时它肯定会改变.

这里有一些代码来演示:

        MyWebServices service = new MyWebServices ();
        MyWebServicesSoap port = service.getMyWebServicesSoap12();

        // Turn off chunking so that NTLM can occur
        Client client = ClientProxy.getClient(port);
        HTTPConduit http = (HTTPConduit) client.getConduit();
        HTTPClientPolicy httpClientPolicy = new HTTPClientPolicy();
        httpClientPolicy.setConnectionTimeout(36000);
        httpClientPolicy.setAllowChunking(false);
        http.setClient(httpClientPolicy);

        port.doSomethingUseful();
Run Code Online (Sandbox Code Playgroud)

同样,我无法在CXF客户端API中看到允许我设置服务端点的地方.不是我能看到的.在这种情况下,目标是http://localhost/integration/webservices/mywebservices.asmx,但我可以在任何地方.当然这个行人问题以某种方式解决了?

java web-services cxf client-side

27
推荐指数
2
解决办法
3万
查看次数

?wsdl和?singleWsdl参数之间有什么区别?

我的消息传递提供程序为我提供了两种不同的WSDL.

http://my.amazonaws.com:8000/webservice/?wsdl
http://my.amazonaws.com:8000/webservice/?singleWsdl
Run Code Online (Sandbox Code Playgroud)

第一个是嵌入式 WSDL.不能使用它来生成WSDL2java包,也不能使用JAX-WS来创建连接.

第二个是单个 WSDL.它可以使用CXF 3.0的WSDL2java生成Java包,并可以使用JAX-WS创建连接.它工作得很好.

请告诉我这两种WSDL之间的区别.

wsdl axis2 web-services cxf jax-ws

26
推荐指数
1
解决办法
2万
查看次数

使用Apache CXF以XML格式记录请求/响应

是否可以使用CXF将请求/响应记录为XML,理想情况下是单独的文件,以便我可以监视应用程序正在做什么?

xml cxf webservice-client

25
推荐指数
4
解决办法
6万
查看次数

How to package an Apache CXF application into a monolithic JAR with the Maven "shade" plugin

I am writing a console-based Java application, intended to be run by cron in a batch-processing manner. The batch-processing application makes calls to a SOAP web service, using the Apache CXF framework for JAX-WS.

To make deployment easier, and to prevent CLASSPATH issues, I would like to bundle up the application (with all its dependencies) into a single monolithic JAR file... using the "shade" plugin for Maven.

My application works just fine when I run it from my Eclipse …

java maven-2 cxf maven

25
推荐指数
3
解决办法
2万
查看次数

CXF Web服务客户端:"无法创建安全的XMLInputFactory"

我使用此处的说明编写并将CXF Web服务部署到Tomcat服务器.Web服务部署得很好,因为我可以在Web浏览器中看到WSDL文件.

我的独立Java客户端程序不起作用.这是代码:

System.out.println("Creating client");
Properties properties = System.getProperties();
properties.put("org.apache.cxf.stax.allowInsecureParser", "1");
System.setProperties(properties);
JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean();
factory.setServiceClass(ExampleWebService.class);
factory.setAddress("http://X.X.X.X:9090/WebServices/ExampleWebService");
ExampleWebService exampleWebService = (ExampleWebService)factory.create();
System.out.println("Done creating client");
exampleWebService.method1("test");
System.out.println("After calling method1");
Run Code Online (Sandbox Code Playgroud)

我将所有jar文件(包括woodstox-core-asl-4.2.0.jar文件)从CXF 2.7.7发行版复制到客户端程序的类路径中,当我运行客户端时,我得到以下异常:

Creating client
Nov 20, 2013 8:05:26 PM org.apache.cxf.service.factory.ReflectionServiceFactoryBean buildServiceFromClass
INFO: Creating Service {http://webservices.server/}ExampleWebServiceService from class server.webservices.ExampleWebService
Done creating client
javax.xml.ws.soap.SOAPFaultException: Cannot create a secure XMLInputFactory
    at org.apache.cxf.jaxws.JaxWsClientProxy.invoke(JaxWsClientProxy.java:157)
    at $Proxy38.printString(Unknown Source)
    at ExampleNmsWebServiceClient.printString(ExampleNmsWebServiceClient.java:29)
    at ExampleNmsWebServiceClient.main(ExampleNmsWebServiceClient.java:40)
Caused by: org.apache.cxf.binding.soap.SoapFault: Cannot create a secure XMLInputFactory
    at org.apache.cxf.binding.soap.interceptor.Soap11FaultInInterceptor.unmarshalFault(Soap11FaultInInterceptor.java:84)
    at org.apache.cxf.binding.soap.interceptor.Soap11FaultInInterceptor.handleMessage(Soap11FaultInInterceptor.java:51) …
Run Code Online (Sandbox Code Playgroud)

web-services cxf woodstox

25
推荐指数
6
解决办法
5万
查看次数

使用Apache CXF在SOAP POST请求中获取错误但curl工作正常

我有一个非常奇怪的问题.我正在尝试通过HTTPS执行SOAP POST请求.当我从我的代码发送请求时,我收到HTTP 500错误.现在从cxf日志中,如果我复制了相同的SOAP消息(标题和正文),我得到了错误,并使用简单的curl请求发布它,它工作正常.下面是我如何创建服务类和其他初始化

URL wsdlurl = SOAPWebServiceTransport.class.getClassLoader().
        getResource("my.wsdl");
OnlinePort service= new OnlinePortService(wsdlurl).getOnlinePortPort();
Client proxy = ClientProxy.getClient(service);

// Provides WS-Security
WSS4JOutInterceptor wss4jOut = new WSS4JOutInterceptor();
wss4jOut.setProperty("action", "UsernameToken");
wss4jOut.setProperty("user", userName);
wss4jOut.setProperty("passwordType", "PasswordText");
wss4jOut.setProperty("password", password);
wss4jOut.setProperty(WSHandlerConstants.ADD_UT_ELEMENTS,
        WSConstants.NONCE_LN + " " + WSConstants.CREATED_LN);
wss4jOut.setProperty(WSHandlerConstants.PW_CALLBACK_CLASS, ServerPasswordCallback.class.getName());

proxy.getEndpoint().getOutInterceptors().add(wss4jOut);
setConduitProperties((HTTPConduit) proxy.getConduit(),url);
Run Code Online (Sandbox Code Playgroud)

在set conduit方法中,我忽略了ssl检查(仅用于开发环境)并设置了一些标头.

TLSClientParameters tcp = new TLSClientParameters();
tcp.setDisableCNCheck(true);
// Creating Trust Manager
TrustManager[] trustAllCerts = new TrustManager[] {
    new X509TrustManager() {
        public java.security.cert.X509Certificate[] getAcceptedIssuers() {
            return null;
        }

        public void checkClientTrusted(
                java.security.cert.X509Certificate[] certs, String authType) { …
Run Code Online (Sandbox Code Playgroud)

java apache https curl cxf

24
推荐指数
1
解决办法
5048
查看次数

我的Apache CXF客户端出了什么问题?

这是我的一部分pom.xml:

<dependency>
  <groupId>org.apache.cxf</groupId>
  <artifactId>cxf-rt-frontend-jaxws</artifactId>
  <version>${cxf.version}</version>
  <scope>runtime</scope>
</dependency>
<dependency>
  <groupId>org.apache.cxf</groupId>
  <artifactId>cxf-rt-transports-http</artifactId>
  <version>${cxf.version}</version>
  <scope>runtime</scope>
</dependency>
Run Code Online (Sandbox Code Playgroud)

我正在尝试使用Apache CXF作为JAX-WS的实现.一切正常(Java代码是通过WSDL生成的org.apache.cxf:cxf-codegen-plugin:2.4.0),直到执行:

java.lang.NoSuchMethodError:
javax.wsdl.xml.WSDLReader.readWSDL(Ljavax/wsdl/xml/WSDLLocator;Lorg/w3c/dom/Element;)Ljavax/wsdl/Definition;
at org.apache.cxf.wsdl11.WSDLManagerImpl.loadDefinition(WSDLManagerImpl.java:237)
at org.apache.cxf.wsdl11.WSDLManagerImpl.getDefinition(WSDLManagerImpl.java:186)
at org.apache.cxf.wsdl11.WSDLServiceFactory.<init>(WSDLServiceFactory.java:91)
at org.apache.cxf.jaxws.ServiceImpl.initializePorts(ServiceImpl.java:203)
at org.apache.cxf.jaxws.ServiceImpl.<init>(ServiceImpl.java:147)
at org.apache.cxf.jaxws.spi.ProviderImpl.createServiceDelegate(ProviderImpl.java:90)
at javax.xml.ws.Service.<init>(Service.java:56)
....
Run Code Online (Sandbox Code Playgroud)

这是什么意思?我错过了什么依赖?

java cxf jax-ws maven

23
推荐指数
1
解决办法
2万
查看次数

java.lang.NoSuchFieldError:REFLECTION

我正在使用CXF创建一个项目,并使用具有一定安全性的MTOM(我不知道该信息是否相关).

当我尝试初始化我的服务器时,我收到了这个错误:

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'example': Invocation of init method failed; nested exception is java.lang.NoSuchFieldError: REFLECTION
Run Code Online (Sandbox Code Playgroud)

这是我的cxf-servlet.xml文件:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:jee="http://www.springframework.org/schema/jee" xmlns:jaxws="http://cxf.apache.org/jaxws"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="
     http://www.springframework.org/schema/beans 
     http://www.springframework.org/schema/beans/spring-beans.xsd
     http://cxf.apache.org/jaxws
     http://cxf.apache.org/schemas/jaxws.xsd">

<jaxws:endpoint 
    id="example" 
    address="/example"
    implementor="br.com.arthur.services.ExampleService">

    <!-- Uncomment only if using WS-SecurityPolicy -->
    <jaxws:properties>
        <entry key="mtom-enabled" value="true" />
        <entry key="ws-security.callback-handler" value-ref="myPasswordCallback" />
    </jaxws:properties>

    <!-- Uncomment only if using standard WSS4J interceptors -->
    <!--jaxws:inInterceptors> <bean class="org.apache.cxf.ws.security.wss4j.WSS4JInInterceptor"> 
        <constructor-arg> <map> <entry key="action" value="UsernameToken"/> <entry 
        key="passwordType" value="PasswordText"/> <entry key="passwordCallbackRef" 
        value-ref="myPasswordCallback"/> </map> </constructor-arg> …
Run Code Online (Sandbox Code Playgroud)

spring cxf mtom maven

23
推荐指数
2
解决办法
4万
查看次数

如何从不同的服务中合并WSDL和XSD的公共部分?

我必须与一组Web服务进行交互,每个Web服务都有自己的WSDL和XSD.XSD有时合并在一个文件中,有时会分布在多个文件中(20-30).但是,根据经验,我知道大多数消息结构和数据共享一个大的公共子集,在不同的事务中可能只有20%不同.

不幸的是,我无法控制服务器部件或服务声明,所以让他们修复它是不可能的.客户端的第一个版本单独生成每个服务,然后将它们用作单独的外观,以形成连贯的更高级别服务,作为另一个系统的适配器.

我使用CXF和默认的JAXB绑定,并为每个服务强加了不同的生成包.我这样做是因为一些大多数服务都使用通用数据模型,但并非所有服务都使用相同的版本或定制,所以我有冲突,因此选择了暴力,所以我可以完成系统.

但是,这会导致适配器的内存要求在每个服务加载其上下文时通过屋顶.现在,即使在我开始发送请求和处理响应之前,我还有500M的内存仅用于容纳服务客户端的适配器.虽然我可以使用当前情况毫无问题地运行系统,但这会产生危害解决方案部署的约束; 我的客户希望大幅减少这种情况(60%或更多),以便该系统可以与其他系统一起安装而无需硬件升级.

问题如下: 是否有工具或技术允许我将每个交易的公共部分放在一起,以便它们可以生成一次并在需要时引用?

除了将系统重新分解为不同的框架或数据绑定所需的时间之外,我不受CXF或JAXB的约束.

预先感谢您的帮助.

---编辑---

谢谢Blaise.这指向JAXB的一个有用的功能:剧集.不幸的是,我仍然需要提取不同服务的公共基础部分.所以现在我需要的是一种通过结构差异提取这个公共部分的方法,这是一个diff工具,可以了解XSD描述的结构和类型层次结构,以便使用适当的引用来连接公共部分.专业部分.

java cxf jaxb out-of-memory webservice-client

22
推荐指数
1
解决办法
2606
查看次数

在Karaf中的JAX-RS包上使用Spring Security

我有一个OSGi包,它使用JAX-RS来处理一些REST服务.该捆绑包使用Apache CXF在Karaf中运行.我需要将基本的http身份验证应用于某些路径/方法组合.我一直在修改Spring Security,看起来新的3.1版本可以让你做到这一点,但是我在使用OSGi时遇到了很多麻烦.

就像测试一样,我创建了一个非常简单的beans.xml文件:

<beans>
    <import resource="classpath:META-INF/cxf/cxf.xml"/>
    <import resource="classpath:META-INF/cxf/cxf-extension-jaxrs-binding.xml"/>
    <import resource="classpath:META-INF/cxf/cxf-extension-http.xml"/>
    <import resource="classpath:META-INF/cxf/osgi/cxf-extension-osgi.xml"/>

    <jaxrs:server id="serverTest" address="/test">
        <jaxrs:serviceBeans>
            <ref bean="tstSvr"/>
        </jaxrs:serviceBeans>
    </jaxrs:server>

    <bean id="tstSvr" class="com.demo.Test"/>

    <security:http auto-config="true">
        <security:intercept-url pattern="/admin/**" access="ROLE_ADMIN" method="PUT" />
        <security:intercept-url pattern="/**" access="ROLE_USER" />
    </security:http>

    <security:authentication-manager>
        <security:authentication-provider>
            <security:user-service>
                <security:user name="user" password="pass" authorities="ROLE_USER"/>
                <security:user name="admin" password="pass" authorities="ROLE_ADMIN"/>
            </security:user-service>
        </security:authentication-provider>
    </security:authentication-manager>
</beans>
Run Code Online (Sandbox Code Playgroud)

现在,这里有趣的部分...从我一直在做的所有阅读中,我需要一个web.xml来实现这一点.比如我尝试使用的这个示例:

<web-app>
    <filter>
        <filter-name>springSecurityFilterChain</filter-name>
        <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>springSecurityFilterChain</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>
</web-app>
Run Code Online (Sandbox Code Playgroud)

使用这两个文件的组合不起作用.并且"没有用",我的意思是什么也没发生.没有错误消息,没有异常,捆绑功能就像我尝试添加spring security之前一样.我假设问题是bundle需要是一个WAR或WAB来加载web.xml.它是否正确?

更重要的是,有没有一种方法可以让没有web.xml的春天工作?

我正在假设我需要将捆绑包作为一个捆绑包供CXF加载它,所以我无法将其转换为WAR或WAB,但我并不完全确定是这种情况.

感谢您的任何帮助,您可以提供!

更新: 在做了一堆额外的谷歌搜索后,我发现了一个论坛帖子,提到添加Web-FilterMappings: springSecurityFilterChain;url-patterns:="/*"到您的清单而不是使用web.xml.但是,您仍然需要使用WAB而不是普通的捆绑包.我已将该行添加到我的清单中以防万一,但它没有任何效果.我的问题似乎转变为:如何在CXF中使用WAB?

更新2: 因为这个问题不够长......我决定尝试使用Spring …

java osgi cxf spring-security apache-karaf

22
推荐指数
1
解决办法
2829
查看次数