axis调用cxf服务端

使用axis(版本1.4)调用cxf服务端一直调用不成功,郁闷了一上午啊。经过google之后,嘻嘻~终于得以解决,讲述一下我的代码和解决过程
---使用了bboss mvc集成的cxf作为ws服务端
axis需要的jar包:axis.jar,axis-ant.jar,commons-discovery-0.2.jar,commons-logging-1.0.4.jar,jaxrpc.jar,log4j-1.2.8.jar,saaj.jar,wsdl4j-1.5.1.jar
import javax.jws.WebService;
/**
 * <p>类的描述:XX数据同步</p>
 * @author XX
 * @version 1.0
 * @date 2011-8-9 上午11:38:20
 */
@WebService(name="DataSynInf")
public interface DataSynInf {
        
        /**
         * XXXXXXXXX
         * @param xml
         * @return
         */
        public String synMaterialAndBom(String xml);

}

public static void testDemo() {
                try {

                        String endpoint = " http://172.16.81.65:8080/cxfservices/InterfacePort";
                        // 调用过程
                        Service service = new Service();

                        Call call = (Call) service.createCall();

                        call.setTargetEndpointAddress(new java.net.URL(endpoint));

                        call.setOperationName("synMaterialAndBom");// WSDL里面描述的操作名称

                        call.addParameter("xml",
                                        org.apache.axis.encoding.XMLType.XSD_STRING,
                                        javax.xml.rpc.ParameterMode.IN);// 操作的参数

                        call.setReturnType(org.apache.axis.encoding.XMLType.XSD_STRING);// 设置返回类型

                        call.setUseSOAPAction(true);

                        // 给方法传递参数,并且调用方法
                        String temp = "good";
                        Object[] obj = new Object[] { temp };
                        String result = (String) call.invoke(obj);

                        System.out.println("Result is : " + result);
                } catch (Exception e) {
                        e.printStackTrace();
                }
        }

AxisFault
 faultCode: {http://schemas.xmlsoap.org/soap/envelope/}Client
 faultSubcode: 
 faultString: Unmarshalling Error: unexpected element (uri:&quot;&quot;, local:&quot;xml&quot;). Expected elements are &lt;{}arg0&gt; 
 faultActor: 
 faultNode: 
 faultDetail: 
        {http://xml.apache.org/axis/}stackTrace:Unmarshalling Error: unexpected element (uri:&quot;&quot;, local:&quot;xml&quot;). Expected elements are &lt;{}arg0&gt; 
        at org.apache.axis.message.SOAPFaultBuilder.createFault(SOAPFaultBuilder.java:222)
        at org.apache.axis.message.SOAPFaultBuilder.endElement(SOAPFaultBuilder.java:129)
        at org.apache.axis.encoding.DeserializationContext.endElement(DeserializationContext.java:1087)
        at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.endElement(AbstractSAXParser.java:633)
        at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.scanEndElement(XMLNSDocumentScannerImpl.java:719)
        at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDispatcher.dispatch(XMLDocumentFragmentScannerImpl.java:1685)
        at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:368)
        at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:834)
        at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:764)
        at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:148)
        at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1242)
        at javax.xml.parsers.SAXParser.parse(SAXParser.java:375)
        at org.apache.axis.encoding.DeserializationContext.parse(DeserializationContext.java:227)
        at org.apache.axis.SOAPPart.getAsSOAPEnvelope(SOAPPart.java:696)
        at org.apache.axis.Message.getSOAPEnvelope(Message.java:435)
        at org.apache.axis.transport.http.HTTPSender.readFromSocket(HTTPSender.java:796)
        at org.apache.axis.transport.http.HTTPSender.invoke(HTTPSender.java:144)
        at org.apache.axis.strategies.InvocationStrategy.visit(InvocationStrategy.java:32)
        at org.apache.axis.SimpleChain.doVisiting(SimpleChain.java:118)
        at org.apache.axis.SimpleChain.invoke(SimpleChain.java:83)
        at org.apache.axis.client.AxisClient.invoke(AxisClient.java:165)
        at org.apache.axis.client.Call.invokeEngine(Call.java:2784)
        at org.apache.axis.client.Call.invoke(Call.java:2767)
        at org.apache.axis.client.Call.invoke(Call.java:2443)
        at org.apache.axis.client.Call.invoke(Call.java:2366)
        at org.apache.axis.client.Call.invoke(Call.java:1812)
        at com.zoomlion.Demo.testDemo(Demo.java:81)
        at com.zoomlion.Demo.main(Demo.java:54)

        {http://xml.apache.org/axis/}hostname:PC-201010261558

Unmarshalling Error: unexpected element (uri:"", local:"xml"). Expected elements are <{}arg0> 
        at org.apache.axis.message.SOAPFaultBuilder.createFault(SOAPFaultBuilder.java:222)
        at org.apache.axis.message.SOAPFaultBuilder.endElement(SOAPFaultBuilder.java:129)
        at org.apache.axis.encoding.DeserializationContext.endElement(DeserializationContext.java:1087)
        at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.endElement(AbstractSAXParser.java:633)
        at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.scanEndElement(XMLNSDocumentScannerImpl.java:719)
        at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDispatcher.dispatch(XMLDocumentFragmentScannerImpl.java:1685)
        at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:368)
        at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:834)
        at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:764)
        at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:148)
        at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1242)
        at javax.xml.parsers.SAXParser.parse(SAXParser.java:375)
        at org.apache.axis.encoding.DeserializationContext.parse(DeserializationContext.java:227)
        at org.apache.axis.SOAPPart.getAsSOAPEnvelope(SOAPPart.java:696)
        at org.apache.axis.Message.getSOAPEnvelope(Message.java:435)
        at org.apache.axis.transport.http.HTTPSender.readFromSocket(HTTPSender.java:796)
        at org.apache.axis.transport.http.HTTPSender.invoke(HTTPSender.java:144)
        at org.apache.axis.strategies.InvocationStrategy.visit(InvocationStrategy.java:32)
        at org.apache.axis.SimpleChain.doVisiting(SimpleChain.java:118)
        at org.apache.axis.SimpleChain.invoke(SimpleChain.java:83)
        at org.apache.axis.client.AxisClient.invoke(AxisClient.java:165)
        at org.apache.axis.client.Call.invokeEngine(Call.java:2784)
        at org.apache.axis.client.Call.invoke(Call.java:2767)
        at org.apache.axis.client.Call.invoke(Call.java:2443)
        at org.apache.axis.client.Call.invoke(Call.java:2366)
        at org.apache.axis.client.Call.invoke(Call.java:1812)
        at com.zoomlion.Demo.testDemo(Demo.java:81)
        at com.zoomlion.Demo.main(Demo.java:54)


错误原因就是因为没有在cxf服务端的方法中的参数上注解为ws调用的参数,修改服务端代码如下:
import javax.jws.WebParam;
import javax.jws.WebService;


/**
 * <p>类的描述:XX数据同步</p>
 * @author XX
 * @version 1.0
 * @date 2011-8-9 上午11:38:20
 */
@WebService(name="DataSynInf")
public interface DataSynInf {
        
        /**
         * 同步物料和bom关系接口
         * @param xml
         * @return
         */
        public String synMaterialAndBom(@WebParam(name="xml") String xml);

}


但是使用cxf调用cxf服务端,不管它有没有注解参数都可以成功调用!以后cxf服务端一定要记得注解参数

猜你喜欢

转载自t22011787.iteye.com/blog/1144662