Tag: cxf

使用JPA Hibernate实体定义Rest API – LAZY和EAGER

如何为获取JPA实体的特定关系定义RESTFul Web服务API的最佳方法是什么? 例: 如果一个资源用户具有属性角色(1-N关系) 我想有时候调用我的资源getUserByName(我不想因为性能带来关系)和getUserByNameWithRoles(这里我想要关于evict双网络旅行) 如何通过javarest获得此function的最佳方法是什么? @Path(“/user”) class UserResource{ @GET @Path(“/{name}”) public Response getUserByName(@PathParam(“name”) String name){ // hibernate query: select u from User u where u.name = :name } @GET // How I map this URL? @Path(“/{name}”) public Response getUserByNameWithRoles(@PathParam(“name”) String name){ // hibernate query: select u from User u inner join fetch u.roles where […]

Apache CXF wsdl通过SSL / TLS下载

我有一个运行的cxf服务 https://localhost:8443/services/MyService?wsdl 需要客户证书。 WSDL在这里并不重要。 我删除客户端证书或https要求时能够调用该服务。 使用cxf wsdl2java实用程序生成服务和客户端类。 这是MyService.class: package com.mycompany; import java.net.URL; import java.util.logging.Level; import java.util.logging.Logger; import javax.xml.namespace.QName; import javax.xml.ws.Service; import javax.xml.ws.WebEndpoint; import javax.xml.ws.WebServiceClient; import javax.xml.ws.WebServiceFeature; /** * This class was generated by Apache CXF 2.7.3 2013-03-29T13:59:37.423-03:00 Generated source version: 2.7.3 */ @WebServiceClient(name = “MyService”, wsdlLocation = “myservice.wsdl”, targetNamespace = “http://server/schemas/services”) public class MyService extends […]

maven-cxf-codegen-plugin使用Jaxb绑定为所有生成的类添加inheritance

我正在使用Apache CXF的cxf-codegen-plugin将wsdl转换为java对象。 我指定了一个绑定文件来添加额外的jaxb处理。 我希望所有这些文件都从接口inheritance(或扩展抽象类)。 我的问题是,虽然我可以使用一个生成的文件来使用它 example.Dao 这将使sampleObj实现example.Dao。 我不知道如何处理所有复杂类型(生成的类)。 不为每个类重复上述绑定(> 100) 我试过了, 但它不起作用。 这是我的maven插件,如果它有帮助: org.apache.cxf cxf-codegen-plugin ${cxf.version} generate-resources process-resources ${project.build.directory}/generated/ ${wsdl_location} classpath:wsdl.wsdl <!–classpath:wsdl.wsdl–> -autoNameResolution -xjc-Xfluent-api -xjc-Xbg -verbose -validate -mark-generated -xjc-Xinheritance -p com.example ${project.build.directory}\classes\jax-ws_binding.xjb wsdl2java org.jvnet.jaxb2_commons jaxb2-fluent-api 3.0 org.jvnet.jaxb2_commons jaxb2-basics 0.6.5 org.jvnet.jaxb2_commons jaxb2-basics-annotate 0.6.5 org.jvnet.jaxb2_commons jaxb2-basics-runtime 0.6.5 org.apache.cxf.xjcplugins cxf-xjc-boolean 2.7.0 org.apache.cxf cxf-api ${cxf.version}

加密加密属性文件中的密码

问题 我正在使用Apache CXF 3.0.7,并且读到这一点,在新function中,您可以在Crypto属性文件中存储(BASE-64编码)密钥库密码的加密版本,但我不知道如何添加它,我没有找到这个实现的例子。 在apache网站上说: Crypto属性文件(用于创建签名)的内容的典型示例如下: org.apache.wss4j.crypto.provider=org.apache.wss4j.common.crypto.Merlin org.apache.wss4j.crypto.merlin.keystore.type=jks org.apache.wss4j.crypto.merlin.keystore.password=security org.apache.wss4j.crypto.merlin.keystore.alias=wss40 org.apache.wss4j.crypto.merlin.keystore.file=keys/wss40.jks 请注意,用于加载密钥库的密码是明文。 Apache WSS4J 2.0.0的一个新function是能够在Crypto属性文件中存储(BASE-64编码)密钥库密码的加密版本。 定义了新的PasswordEncryptor接口以允许加密/解密密码。 现在基于Jasypt提供了一个名为JasyptPasswordEncryptor的默认实现,它使用“PBEWithMD5AndTripleDES”。 WSPasswordCallback类还有一个名为WSPasswordCallback.PASSWORD_ENCRYPTOR_PASSWORD的“用法”,用于返回用于PasswordEncryptor实现的主密码。 当WSS4J通过属性文件加载Crypto实现,并且遇到以“ENC(编码加密密码)”格式加密的密码时,它会通过此WSPasswordCallback用法标记向CallbackHandler查询密码。 可以通过新配置标记ConfigurationConstants.PASSWORD_ENCRYPTOR_INSTANCE(“passwordEncryptorInstance”)将自定义PasswordEncryptor实现传递给WSS4J。 可以通过新配置标记ConfigurationConstants.PASSWORD_ENCRYPTOR_INSTANCE(“passwordEncryptorInstance”)将自定义PasswordEncryptor实现传递给WSS4J。 我想我必须在我的属性文件中声明类似的东西: org.apache.wss4j.crypto.merlin.keystore.password=ENC(?????) 但我不知道如何使用默认的JasyptPasswordEncryptor加密我的密码。 另外,我猜想在我的CallbackHandler中我会有类似的东西: if (usage==WSPasswordCallback.PASSWORD_ENCRYPTOR_PASSWORD){ ???? } 解 好的,在测试运行的情况下,我测试了我的解决方案,现在正在运行。 下载jasypt-1.9.2-dist.zip 使用此命令获取编码密码encrypt input = real_keystore_password password = master_password algorithm = PBEWithMD5AndTripeDES 复制OUTPUT(例如:0laAaRahTQJzlsDu771tYi) 当您使用此算法时,您需要Java密码术扩展(JCE)无限强度。 放入你的JDK。 将编码输出放在属性中 org.apache.wss4j.crypto.provider = org.apache.wss4j.common.crypto.Merlin org.apache.wss4j.crypto.merlin.keystore.type = jks org.apache.wss4j.crypto.merlin.keystore.password = ENC(0laAaRahTQJzlsDu771tYi)org.apache.wss4j.crypto.merlin.keystore.alias […]

如何将jax-ws服务部署到eclipse或tomcat?

作为一名Web服务初学者,我已经尝试了两周的时间来获得一个使用maven,eclipse和tomcat的hello world webservice。 我放弃了尝试让任何代码/ wsdl生成器工作,我按照本教程http://myarch.com/create-jax-ws-service-in-5-minutes手动编写一个例子,这是辉煌。 这导致4个类文件和一个WSDL文件。 所以我的愚蠢问题是如何在eclipse和/或tomcat中“运行”服务? 我尝试将它们部署为webapp,但没有任何乐趣 – 在web.xml中没有任何内容告诉servlet引擎Web服务是否存在,所以我想它永远不会工作。 我必须在tomcat中有一个特殊的Web服务容器(例如axis2,metro或CXF),并部署到那个? 或者它可以运行一些jax-wsjar+神秘配置? 我不想安装到tomcat metro(使用ant,并且设计为glassfish)或axis2(使用ant,大多数人似乎不推荐)。 我查看了CXF,但无法在他们的网站上找到如何在没有弹簧的情况下在tomcat(或eclipse)上安装/配置它。 我把CFX jar放在maven依赖项中,然后安装了eclipse插件,但这个deoesnt让你更接近实际运行一个没有神秘配置胶水的web服务。 CXF似乎与spring有关,这对我们来说是一个很大的减号,因为我们不使用弹簧(或需要它的任何function)。 我注意到helios wtp有一些名为JSR-109的Web服务项目。 这只是java RPC,还是它支持完整的SOAP websiervice系统,是否值得尝试解决? 任何建议都非常欢迎。 我必须搜索1000页以搜索Web服务的圣杯 – 即如何创建并部署到tomcat端到端。 它应该是这么难吗?

如何在Apache CXF jax-rs(REST)中将JSON数据作为请求主体提交

我正在使用Apache-CXF创建REST Web服务并尝试提交表单。 服务器: 这是我的方法,预计会得到json数据。 @POST @Path(“/addCustomer/”) @Consumes(MediaType.APPLICATION_JSON) //{“Customer”:{“name”:”Some Name”,”id”:6}} public Customer addCustomer(Customer customer){ logger.debug(customer); return customer; } 客户端:我使用firefox REST插件提交请求:使用REST客户端,我发布了以下json作为请求体: {“Customer”:{“name”:”Arnav Awasthi”,”id”:6}} 但我得到”415: Unsupported Media Type” 。

如何关闭额外的日志记录?

我有一个使用Spring和CXF的Java服务。 代码来自以前的开发人员,我正在提供维护,但我在日志中看到了这一点 ————————————– Apr 16, 2013 1:44:11 PM org.apache.cxf.interceptor.AbstractLoggingInterceptor log INFO: Inbound Message —————————- ID: 33 Address: /MyApplication/endpoint Encoding: UTF-8 Http-Method: POST Content-Type: application/x-www-form-urlencoded Headers: {content-type=[application/x-www-form-urlencoded], connection=[close], host= [localhost:8080], Content-Length=[11504], user-agent=[Apache-HttpClient/4.2.3 (java 1.5)], Content-Type=[application/x-www-form-urlencoded]} Payload: { “events” : [ { event }, { event }, … ] } 我们有太多的事件,日志变得无法管理。 有没有办法可以关闭这个日志记录? 这些日志调用不是从应用程序内部创建的,它们是由某种我无法找到的拦截器创建的。 我确实在cxf-context.xml配置文件中找到了这个: 但是,在我已经从配置文件中注释掉这些行之后,日志仍会出现。 请帮忙。 谢谢

使用CXF捕获webserviceexception:NoClassDefFoundError:SOAPFaultBuilder

我一直在使用Apache CXF wsdl2java生成的代码从web服务调用方法已经有一段时间了,到目前为止一直工作正常..我遇到的问题是当webservice(在我的大厅下面实现)合法地抛出一个soapexception,CXF出现以下错误信息: 无法初始化类com.sun.xml.internal.ws.fault.SOAPFaultBuilder 我使用的是Ubuntu 9.04,OpenJDK(IcedTea6 1.4.1)6b14-1.1.1-0ubuntu11,Maven2和CXF 2.2.3。 我目前对如何解决这个问题感到茫然,因为我使用的代码和设置似乎很简单..任何人都能指出我在正确的方向吗? 如果我可以发布任何进一步的细节,请告诉我.. 这是返回的完整堆栈跟踪: java.lang.NoClassDefFoundError: Could not initialize class com.sun.xml.internal.ws.fault.SOAPFaultBuilder at com.sun.xml.internal.ws.client.sei.SyncMethodHandler.invoke(SyncMethodHandler.java:107) at com.sun.xml.internal.ws.client.sei.SyncMethodHandler.invoke(SyncMethodHandler.java:78) at com.sun.xml.internal.ws.client.sei.SEIStub.invoke(SEIStub.java:107) at $Proxy36.downloadPDB(Unknown Source) at path.to.my.code.downloadInvalidFileID(SingleMethodTest.java:64) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:616) at org.junit.internal.runners.TestMethod.invoke(TestMethod.java:59) at org.junit.internal.runners.MethodRoadie.runTestMethod(MethodRoadie.java:98) at org.junit.internal.runners.MethodRoadie$2.run(MethodRoadie.java:79) at org.junit.internal.runners.MethodRoadie.runBeforesThenTestThenAfters(MethodRoadie.java:87) at org.junit.internal.runners.MethodRoadie.runTest(MethodRoadie.java:77) at org.junit.internal.runners.MethodRoadie.run(MethodRoadie.java:42) at org.junit.internal.runners.JUnit4ClassRunner.invokeTestMethod(JUnit4ClassRunner.java:88) at org.junit.internal.runners.JUnit4ClassRunner.runMethods(JUnit4ClassRunner.java:51) at org.junit.internal.runners.JUnit4ClassRunner$1.run(JUnit4ClassRunner.java:44) […]

在CXF +简单前端+ Aegis数据绑定中,SOAP响应错误地反序列化为null

我正在为SOAP Web服务编写客户端。 我正在使用CXF库。 随着简单的前端。 和宙斯盾数据绑定。 服务器为Web方法提供Java接口(名为MediaService),然后在客户端项目中导入该接口。 然后,我使用MediaService.aegis.xml文件来提供方法参数的名称(在序列化请求时不要命名它们)。 这是我在客户端上使用的代码: ClientProxyFactoryBean factory = new ClientProxyFactoryBean(); factory.setDataBinding(new AegisDatabinding()); factory.setServiceClass(MediaService.class); factory.setAddress(urlMediaServer); MediaService service = (MediaService) factory.create(); final List listeReferences = service.sendMedia(bu, media); 服务接口是这样的: public interface MediaService { public List sendMedia(String bu, Media media) throws Exception; } 我已启用XML流日志记录,以便查看发送到服务器的XML流及其返回的流。 以下是流: 请求: sc_phx TEST_CODE test.png 响应: standard photo standard photo 该服务被调用,它回复并且客户端收到正确的回复。 但是在客户端中,进行Web […]

CXF中的格式化XML输出?

我知道在使用Marshaller时如何打开格式的可能性。 但我正在使用Apache CXF(JAX-RS)并返回响应,如return Response.ok(entity).build(); 。 我没有找到任何选项如何格式化输出。 我该怎么做?