如何在axis2下,调用webservice?
在用客户端调用webservice时,错误如下:
org.apache.axis2.AxisFault: services.myService
at org.apache.axis2.description.OutInAxisOperationClient.execute(OutInAxisOperation.java:287)
at org.apache.axis2.client.ServiceClient.sendReceive(ServiceClient.java:457)
at org.apache.axis2.client.ServiceClient.sendReceive(ServiceClient.java:399)
at test.Test1.main(Test1.java:44)
Caused by: java.lang.Exception: org.apache.axis2.AxisFault: services.myService; nested exception is:
java.lang.ClassNotFoundException: services.myService
at org.apache.axis2.AxisFault.makeFault(AxisFault.java:318)
at org.apache.axis2.receivers.AbstractMessageReceiver.makeNewServiceObject(AbstractMessageReceiver.java:60)
at org.apache.axis2.receivers.AbstractMessageReceiver.getTheImplementationObject(AbstractMessageReceiver.java:90)
at org.apache.axis2.rpc.receivers.RPCMessageReceiver.invokeBusinessLogic(RPCMessageReceiver.java:71)
因为不知道如何调试判断webservice问题出在哪里,请各位大哥费心看一下我的程序,指点一下,万分感谢。
服务端代码:
import org.apache.axiom.attachments.utils.IOUtils;
import org.apache.axiom.om.OMAbstractFactory;
import org.apache.axiom.om.OMElement;
import org.apache.axiom.om.OMFactory;
import org.apache.axiom.om.OMNamespace;
import org.apache.axiom.om.OMText;
import org.apache.axis2.AxisFault;
import java.io.FileOutputStream;
import java.io.*;
import java.util.Iterator;
import javax.activation.DataHandler;
import javax.activation.FileDataSource;
public class myService {
public OMElement Hello(OMElement element) throws Exception {
OMElement _name = null;
OMElement _sex = null;
System.out.println(element);
for (Iterator _iterator =element.getChildElements(); _iterator.hasNext();)
{
OMElement _ele = (OMElement) _iterator.next();
if (_ele.getLocalName().equalsIgnoreCase("name")) _name = _ele;
if (_ele.getLocalName().equalsIgnoreCase("sex")) _sex = _ele;
}
if (_name == null || _sex == null) {
throw new AxisFault("Either Name or Sex is null");
}
String mName = _name.getText();
String mSex = _sex.getText();
System.out.println("Hello "+mSex+"."+mName);
设置返回数据
OMFactory fac = OMAbstractFactory.getOMFactory();
OMNamespace ns = fac.createOMNamespace("http://example.org/mtom/data", "x");
OMElement ele = fac.createOMElement("response", ns);
ele.setText("true");
return ele;
}
}
service.xml
<service name="Version">
<description>
This service is to get the running Axis version
</description>
<parameter name="ServiceClass" locked="false">services.myService</parameter>
<operation name="Hello">
<actionMapping>urn:Hello</actionMapping>
<messageReceiver class="org.apache.axis2.rpc.receivers.RPCMessageReceiver" />
</operation>
</service>
客户端
import java.io.StringWriter;
import javax.xml.stream.XMLOutputFactory;
import javax.xml.stream.XMLStreamException;
import org.apache.axiom.om.OMElement;
import org.apache.axiom.om.OMAbstractFactory;
import org.apache.axiom.om.OMFactory;
import org.apache.axiom.om.OMNamespace;
import org.apache.axiom.soap.SOAP11Constants;
import org.apache.axiom.soap.SOAP12Constants;
import org.apache.axis2.AxisFault;
import org.apache.axis2.Constants;
import org.apache.axis2.addressing.EndpointReference;
import org.apache.axis2.client.Options;
import org.apache.axis2.client.ServiceClient;
;
public class Test1 {
private static EndpointReference targetEPR = new EndpointReference("http://202.218.236.132:8080/axis2/services/MyService");
public static void main(String[] args) {
try {
OMElement payload = getMyServiceOMElement();
Options options = new Options();
options.setSoapVersionURI(SOAP11Constants.SOAP_ENVELOPE_NAMESPACE_URI);
options.setTo(targetEPR);
options.setProperty(Constants.Configuration.ENABLE_MTOM, Constants.VALUE_TRUE);
options.setTransportInProtocol(Constants.TRANSPORT_HTTP);
ServiceClient sender = new ServiceClient();
sender.setOptions(options);
System.out.println("payload:"+payload);
OMElement result = sender.sendReceive(payload);
System.out.println("Resule:"+result);
StringWriter writer = new StringWriter();
result.serialize(XMLOutputFactory.newInstance().createXMLStreamWriter(writer));
writer.flush();
System.out.println(writer.toString());
} catch (AxisFault axisFault) {
axisFault.printStackTrace();
} catch (XMLStreamException e) {
e.printStackTrace();
}
}
public static OMElement getMyServiceOMElement() {
OMFactory fac = OMAbstractFactory.getOMFactory();
OMNamespace omNs = fac.createOMNamespace("http://example.org/mtom/data", "x");
OMElement method = fac.createOMElement("Hello", omNs);
OMElement mName = fac.createOMElement("name", omNs);
mName.setText("Zhang");
OMElement mSex = fac.createOMElement("sex", omNs);
mSex.setText("Mr");
method.addChild(mName);
method.addChild(mSex);
return method;
}
}