You can access the WSDL with is generated from the CXF service from this
url http://localhost:8080/trainCFX/HelloWorld?WSDL.
I just have a quick look at the AxisClient, it looks it still use the
JAXRPC API which is replaced by JAXWS. That could explain why you
AxisClient can get the right response from CXF.
If you use TCPmonitor to catch the request and response package, you can
see the difference between using CXF client and AxisClient :)
On 9/30/11 12:50 PM, Tim wrote:
David Sills, thank you for your answer.
No. I don't generate client from wsdl. I don't use wsdl at all.
For better understanding the problem here is client code.
*Axis client*
-----------------------
package com.na.clients;
import java.io.IOException;
import java.net.MalformedURLException;
import java.rmi.RemoteException;
import javax.xml.namespace.QName;
import javax.xml.rpc.ServiceException;
import org.apache.axis.client.Call;
import org.apache.axis.client.Service;
import org.jdom.JDOMException;
public class AxisClient {
private static String URL="http://localhost:8080/";
private static String SERVICE="trainCFX/HelloWorld";
private static String METHOD="sayHi";
public Call getCall(String strEndpoint, String strNamespace, String
strMetodName) throws MalformedURLException
{
Service svcService = new Service();
Call clCall = null;
try {clCall = (Call)svcService.createCall();}
catch (ServiceException e) {e.printStackTrace();}
clCall.setTargetEndpointAddress( new java.net.URL(strEndpoint)
);
clCall.setOperationName(new QName(strNamespace, strMetodName));
return clCall;
}
public static void main(String[] args) throws JDOMException {
AxisClient ac=new AxisClient();
Call clCall = null;
try
{
clCall = ac.getCall(URL+SERVICE, "http://na.com/",
METHOD);
}
catch (IOException e) {
e.printStackTrace();
}
String strResponse="";
try {
* //pass param "Tim" *
*strResponse = (String)clCall.invoke(new Object[]
{"Tim"} );*
} catch (RemoteException e) {
e.printStackTrace();
}
*System.out.println(strResponse);*
}
}
-------------------
*CXF client *(it's the simple client from CXF examples)
--------------
package com.na.clients;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class CFXClient {
private CFXClient() {
}
public static void main(String args[]) throws Exception {
System.out.println("--");
// START SNIPPET: client
ClassPathXmlApplicationContext context
= new ClassPathXmlApplicationContext(new String[]
{"com/na/clients/client-beans.xml"});
HelloWorld client = (HelloWorld)context.getBean("client");
* //pass param "Tim" *
*String response = client.sayHi("Tim");*
*System.out.println("Response: " + response);*
System.exit(0);
// END SNIPPET: client
}
}
-----------
*client-bean.xml (for spring)*
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:jaxws="http://cxf.apache.org/jaxws"
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/schema/jaxws.xsd">
<bean id="client" class="com.na.clients.HelloWorld"
factory-bean="clientFactory" factory-method="create"/>
<bean id="clientFactory"
class="org.apache.cxf.jaxws.JaxWsProxyFactoryBean">
<property name="serviceClass" value="com.na.clients.HelloWorld"/>
<property name="address"
value="http://localhost:8080/trainCFX/HelloWorld"/>
</bean>
</beans>
*And the difference beteen clients*
Axis print: "hi null"
cxf print: "Response: hi, Tim"
--
View this message in context:
http://cxf.547215.n5.nabble.com/Non-CXF-clients-for-CXF-web-services-tp4851892p4855793.html
Sent from the cxf-user mailing list archive at Nabble.com.
--
Willem
----------------------------------
FuseSource
Web: http://www.fusesource.com
Blog: http://willemjiang.blogspot.com (English)
http://jnn.javaeye.com (Chinese)
Twitter: willemjiang
Weibo: willemjiang