|
FAQ has been edited by Eric Johnson (Jul 02, 2008). Content:Frequently Asked QuestionsGeneralApache Incubator and Graduation - When is CXF going to graduate? Is the code "production ready?" Etc....On April 16th, 2008, the Apache Board voted to graduate CXF to a top level project. Work is on going to migrate the CXF resources out of the incubator spaces, but CXF is now officially a graduated project. Can CXF run on JDK 1.4?No. Many of the technologies that CXF is based on require JDK 1.5. JAX-WS, JAXB, &cetra all require JDK 1.5 feastures such as generics and annotations. What's the difference between CXF and FUSE?IONA FUSE Services Framework Consider what Red Hat has done with Linux. Anyone can build their own Linux distribution (http://www.linuxfromscratch.org/ For some additional insight into the FUSE model and how it works, see Bruce Snyder's blog entry entitled The IONA FUSE Model and It's Benefits to the Community JAX-WS RelatedThe parts in my generated wsdl have names of the form "arg0", "arg1", ... Why don't the parts (and Java generated from them) use the nice parameter names I typed into the interface definition?Official answer: The JAX-WS spec (specifically section 3.6.1) mandates that it be generated this way. To customize the name, you have to use an @WebParam(name = "blah") annotation to specify better names. (You can use @WebResult for the return value, but you'll only see the results if you look at the XML.) Reason: One of the mysteries of java is that abstract methods (and thus interface methods) do NOT get their parameter names compiled into them even with debug info. Thus, when the service model is built from an interface, there is no way to determine the names that were using in the original code. If the service is built from a concrete class (instead of an interface) AND the class was compiled with debug info, we can get the parameter names. The simple frontend does this. However, this could cause potential problems. For example, when you go from developement to production, you may turn off debug information (remove -g from javac flags) and suddenly the application may break since the generated wsdl (and thus expect soap messages) would change. Thus, the JAX-WS spec writers went the safe route and mandate that you have to use the @WebParam annotations to specify the more descriptive names. How can I add soap headers to the request/response?There are several ways to do this depending on how your project is written (code first or wsdl first) and requirements such a portability.
Spring RelatedWhen using Spring AOP to enable things like transactions and security, the generated WSDL is very messed up with wrong namespaces, part names, etc...Reason: When using Spring AOP, spring injects a proxy to the bean into CXF instead of the actual bean. The Proxy does not have the annotations on it (like the @WebService annotation) so we cannot query the information directly from the object like we can in the non-AOP case. The "fix" is to also specify the actual serviceClass of the object in the spring config: <jaxws:server
id="myService"
serviceClass="my.package.MyServiceImpl"
serviceBean="#myServiceImpl"
address="/MyService" />
or: <jaxws:endpoint
id="myService"
implementorClass="my.package.MyServiceImpl"
implementor="#myServiceImpl"
address="/MyService" />
|
Unsubscribe or edit your notifications preferences
