当我使用来自CXF的wsdl2java(生成类似于wsimport的东西)生成一个webservice客户端时,通过maven,我的服务从这样的代码开始:
@WebServiceClient(name = "StatusManagement",
wsdlLocation = "c:/some_absolute_path_to_a_wsdl_file.wsdl",
targetNamespace = "http://tempuri.org/")
public class StatusManagement extends Service {
public final static URL WSDL_LOCATION;
public final static QName SERVICE = new QName("http://tempuri.org/", "StatusManagement");
public final static QName WSHttpBindingIStatus = new QName("http://tempuri.org/", "WSHttpBinding_IStatus");
static {
URL url = null;
try {
url = new URL("c:/some_absolute_path_to_a_wsdl_file.wsdl");
} catch (MalformedURLException e) {
System.err.println("Can not initialize the default wsdl from c:/some_absolute_path_to_a_wsdl_file.wsdl");
// e.printStackTrace();
}
WSDL_LOCATION = url;
}
Run Code Online (Sandbox Code Playgroud)
硬编码的绝对路径真的很糟糕.生成的类不能在除我之外的任何其他计算机上工作.
第一个想法是将WSDL文件(以及它导入的所有内容,其他WSDL和XSD)放在jar文件和类路径中.但我们想避免这种情况.由于所有这些都是由基于WSDL和XSD的CXF和JAXB生成的,因此我们认为在运行时需要知道WSDL没有意义.
wsdlLocation属性旨在覆盖WSDL位置(至少这是我在某处获得的),默认值为"".由于我们使用maven,我们尝试<wsdlLocation></wsdlLocation>
在CXF的配置中包含以尝试强制源生成器将wsdlLocation留空.但是,这只是使它忽略XML标记,因为它是空的.我们做了一个非常难看的可耻黑客,使用<wsdlLocation>" + "</wsdlLocation>
. …
有什么区别:
这三个都可用于在Java中创建Web服务.
据我所知,JAX-WS是一个规范,Axis2和CXF是实现,但是如果我没有错,Java 1.6就会实现JAX-WS.
那么可以使用Java 1.6来开发JAX-WS Web服务而无需使用Axis2或CXF吗?那么Axis2,CXF的用途是什么?
我正在研究/比较CXF和Spring-WS的Web服务?我需要既作为WS的提供者又作为消费者.简而言之,我被告知Spring-WS更易于配置,但CXF更容易启动和运行.这个问题是主观的,但有助于我的研究.
您认为这两个图书馆之间的优缺点是什么?这两个中哪一个最适合生产环境?顺便说一句,我将使用JSON而不是XML.
我也想知道社区最支持哪些库,例如教程,文档.
在移动应用程序和Web服务之间使用某种代理,我们对发出帖子请求时的响应感到困惑.我们收到状态为200的回复:好的.但我们找不到/提取JSON响应体.
Client client = ClientBuilder.newClient();
WebTarget webTarget = client.target(WEBSERVICE_BASE_LOCATION + "mobileDevices?operatorCode=KPNSCP");
String jsonString = "{\"osVersion\":\"4.1\",\"apiLevel\":16,\"devicePlatform\":\"ANDROID\"}";
Builder builder = webTarget.request();
Response response = builder.post(Entity.json(jsonString));
Run Code Online (Sandbox Code Playgroud)
我们正在使用JAX-RS.有人可以提供一些提示String
从服务器响应中提取JSON body()吗?
我正在尝试将来自cxf休息服务的休息请求路由到另一个.我查看了http://camel.apache.org/cxfrs.html,它有助于理解部分流程.我在remoteService Invocation级别有一个classCastException.
我究竟做错了什么 ?
<cxf:rsServer id="exposedService" address="/exposed/"
serviceClass="com.example.project.ExposedService" />
<!-- using different classes since we are not just proxying -->
<cxf:rsClient id="remoteService" address="http://remote.com/service"
serviceClass="com.example.project.RemoteService" />
<camel:camelContext xmlns="http://camel.apache.org/schema/spring">
<package>com.example.project</package>
</camel:camelContext>
Run Code Online (Sandbox Code Playgroud)
@Path("/myservice")
public class ExposedService {
@POST
@Consumes("application/xml")
public void postResource(javax.xml.transform.Source resource) {
// source : not using jaxb just plain xml
// only serves to configure the endpoint (?)
}
}
public class RemoteService {
@POST
@Consumes("application/xml")
public void postResource(javax.xml.transform.Source resource) {
// source : not using jaxb …
Run Code Online (Sandbox Code Playgroud) 我正在尝试使用CXF创建一个Web服务客户端来使用WCF Web服务.当我使用wsdl2java时,它使用JAXBElement类型而不是String生成对象.
我读到了使用jaxb bindings.xml文件设置generateElementProperty ="false"来尝试解决问题,但我正在使用的Web服务包含7个导入的模式.
如何指定generateElementProperty="false"
所有七个模式,或者是否有办法将其应用于所有模式?
在控制台模式下使用Apache CXF JaxWsServerFactoryBean时(尝试通过java命令行启动服务器)将获得如下异常:
Caused by: java.io.IOException: Cannot find any registered HttpDestinationFactory from the Bus.
at org.apache.cxf.transport.http.HTTPTransportFactory.getDestination(HTTPTransportFactory.java:295)
at org.apache.cxf.binding.soap.SoapTransportFactory.getDestination(SoapTransportFactory.java:143)
at org.apache.cxf.endpoint.ServerImpl.initDestination(ServerImpl.java:93)
at org.apache.cxf.endpoint.ServerImpl.<init>(ServerImpl.java:72)
at org.apache.cxf.frontend.ServerFactoryBean.create(ServerFactoryBean.java:160)
Run Code Online (Sandbox Code Playgroud)
当通过Spring在Tomcat中使用相同的服务impl时,它可以工作.
<jaxws:endpoint id="abc" implementor="com.AbcServicePortTypeImpl" address="/abc">
Run Code Online (Sandbox Code Playgroud) 我的服务定义如下.
public String getData(@QueryParam("date") Date date)
我正试图java.util.Date
从我的客户端(它是jaxrs:CXF的客户端,而不是通用HTTP客户端或浏览器)传递给它.
我的服务收到Thu Mar 01 22:33:10 IST 2012
HTTP URL中的日期.由于CXF无法Date
使用此String 创建对象,因此我的客户端收到404错误.我尝试ParameterHandler
在服务端使用a ,但我仍然无法成功解析它,因为我不期望任何特定格式的日期.
根据这篇文章,传递一个Date
应该是开箱即用,但我似乎无法让基本案例工作.我是否需要做任何事情才能成功地将Date对象从我的客户端传递给服务?感谢任何帮助.
谢谢