精华内容
下载资源
问答
  • webservice接口请求异常
    2020-04-20 10:40:36

    测试第三方物流系统接口的web service接口编写代码出现异常

    异常1

    java.lang.NoClassDefFoundError: javax/xml/soap/SOAPException
    

    原因:缺少 axis2-saaj.jar

    异常2

    java.lang.NoClassDefFoundError: org/apache/commons/discovery/tools/DiscoverSingleton
    

    原因:缺少commons-discovery.jar

    异常3

    org.apache.commons.logging.LogFactory
    

    原因:缺少commons-logging.jar

    异常4

    Exception in thread "main" javax.xml.ws.soap.SOAPFaultException: Error invoking (……) Nested exception is java.lang.reflect.InvocationTargetException: null
    

    原因:代码上传到服务器时不完全导致

    异常5:如果客户端使用的是axis调用webservice方式,服务器端收到了请求,但请求的参数显示却为null

    原因:在客户端使用call.addParameter设置参数时,和发布的wsdl服务中的参数名不完全一致(大小写也要保持相同)
    解决:将客户端每个接口的参数设置为和wsdl中的相同即可

    异常6

    java.lang.NoClassDefFoundError: javax/xml/rpc/Service
    

    原因:缺少jaxrpc.jar

    更多相关内容
  • C#获取客户端调用WebService时生成的原生的请求xml字符串,生成的Xml可以直接在SoapUI中使用

    C#获取客户端调用WebService时生成的原生的请求xml字符串,生成的Xml可以直接在SoapUI中使用

    新建Windows窗体应用程序GetRequestRawXmlForWebServiceDemo,将默认的Form1重命名为FormGetRequestRawXml,

    FormGetRequestRawXml窗体设计如图:


    添加测试可用的webservice【中英文双向翻译】: 

    http://www.webxml.com.cn/WebServices/TranslatorWebService.asmx?wsdl

    同时添加对System.Web的引用

    新建Xml和实体类之间的转化以及XML格式化【换行、缩进、对齐】的操作类文件XmlSerializeUtil.cs

    类XmlSerializeUtil源程序如下:

    using System;
    using System.Collections.Generic;
    using System.IO;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Xml;
    using System.Xml.Serialization;
     
    namespace GetRequestRawXmlForWebServiceDemo
    {
        /// <summary>
        /// XML与实例化类之间的转化
        /// </summary>
        public sealed class XmlSerializeUtil
        {
            /// <summary>
            /// 类的对象转换为xml字符串,
            /// 生成的xml的根节点就是T的类型名称
            /// </summary>
            /// <typeparam name="T"></typeparam>
            /// <param name="t"></param>
            /// <param name="encoding"></param>
            /// <returns></returns>
            public static string ObjectToXml<T>(T t, Encoding encoding)
            {
                XmlSerializer xmlSerializer = new XmlSerializer(typeof(T));
                using (MemoryStream ms = new MemoryStream())
                {
                    using (XmlTextWriter xmlWriter = new XmlTextWriter(ms, encoding))
                    {
                        xmlSerializer.Serialize(xmlWriter, t);
                        return encoding.GetString(ms.ToArray()).Trim();
                    }
                }
            }
    
            /// <summary>
            /// 将指定的对象写入Xml文件
            /// 又在MSDN上查找XmlIncludeAttribute的定义如下:允许 XmlSerializer 在它序列化或反序列化对象时识别类型。
            /// 所以我想是因为方法返回的类型其实是House类的子类,XmlSerializer在序列化时只能识别父类,而不能识别子类,所以导致序列化的错误。
            /// 所以我将[XmlInclude(typeof(SaleHouse))]和[XmlInclude(typeof(RentHouse))]同时加到WebService中,问题解决。
            /// </summary>
            /// <typeparam name="T"></typeparam>
            /// <param name="t"></param>
            /// <param name="xmlFilePath"></param>
            public static void ObjectToXml<T>(T t, string xmlFilePath, Encoding encoding)
            {
                XmlSerializer xmlSerializer = new XmlSerializer(typeof(T));
                using (StreamWriter writer = new StreamWriter(xmlFilePath, false, encoding))
                {
                    xmlSerializer.Serialize(writer, t);
                    writer.Close();
                }
            }
    
            /// <summary>
            /// 将实体对象转换成XML
            /// </summary>
            /// <typeparam name="T">实体类型</typeparam>
            /// <param name="obj">实体对象</param>
            public static string XmlSerialize<T>(T obj)
            {
                try
                {
                    using (StringWriter sw = new StringWriter())
                    {
                        Type t = obj.GetType();
                        XmlSerializer serializer = new XmlSerializer(obj.GetType());
                        serializer.Serialize(sw, obj);
                        sw.Close();
                        return sw.ToString();
                    }
                }
                catch (Exception ex)
                {
                    throw new Exception("将实体对象转换成XML异常", ex);
                }
            }
    
            /// <summary>
            /// xml字符串转实体类,xml字符串的根节点一定要与类名一致,否则将产生错误
            /// </summary>
            /// <typeparam name="T"></typeparam>
            /// <param name="xmlString"></param>
            /// <param name="encoding"></param>
            /// <returns></returns>
            public static T XmlToObject<T>(string xmlString, Encoding encoding)
            {
                XmlSerializer xmlSerializer = new XmlSerializer(typeof(T));
                using (MemoryStream ms = new MemoryStream(encoding.GetBytes(xmlString)))
                {
                    return (T)xmlSerializer.Deserialize(ms);
                }
            }
    
            /// <summary>
            /// 将指定路径的xml文件转化为对应的T类型对象
            /// </summary>
            /// <typeparam name="T"></typeparam>
            /// <param name="xmlFilePath"></param>
            /// <returns></returns>
            public static T XmlDeSerialize<T>(string xmlFilePath)
            {
                XmlSerializer serializer = new XmlSerializer(typeof(T));
                using (FileStream fs = new FileStream(xmlFilePath, FileMode.Open))
                {
                    return (T)serializer.Deserialize(fs);
                }
            }
    
            /// <summary>
            /// 对xml节点进行换行,格式化对齐操作
            /// </summary>
            /// <param name="srcXml"></param>
            /// <returns></returns>
            public static string FormatXml(string srcXml)
            {
                string formattedXml = IndentedFormat(IndentedFormat(srcXml).Replace("><", ">\r\n<"));
                return formattedXml;
            }
    
            /// <summary>
            /// 对XML字符串进行换行缩进,格式化
            /// </summary>
            /// <param name="xml"></param>
            /// <returns></returns>
            private static string IndentedFormat(string xml)
            {
                string indentedText = string.Empty;
                try
                {
                    XmlTextReader reader = new XmlTextReader(new StringReader(xml));
                    reader.WhitespaceHandling = WhitespaceHandling.None;
    
                    StringWriter indentedXmlWriter = new StringWriter();
                    XmlTextWriter writer = CreateXmlTextWriter(indentedXmlWriter);
                    writer.WriteNode(reader, false);
                    writer.Flush();
    
                    indentedText = indentedXmlWriter.ToString();
                }
                catch (Exception)
                {
                    indentedText = xml;
                }
                return indentedText;
            }
    
            /// <summary>
            /// 写入四个缩进字符【空格】
            /// </summary>
            /// <param name="textWriter"></param>
            /// <returns></returns>
            private static XmlTextWriter CreateXmlTextWriter(TextWriter textWriter)
            {
                XmlTextWriter writer = new XmlTextWriter(textWriter);
                //将Tab转化为4个空格
                bool convertTabsToSpaces = true;
                if (convertTabsToSpaces)
                {
                    writer.Indentation = 4;
                    writer.IndentChar = ' ';
                }
                else
                {
                    writer.Indentation = 1;
                    writer.IndentChar = '\t';
                }
                writer.Formatting = Formatting.Indented;
                return writer;
            }
        }
    }
    
    

    新建类文件SoapUtil.cs,类SoapUtil用于获取客户端调用WebService时生成的原生的请求xml字符串,可以直接在SoapUI中使用。

    类SoapUtil源程序如下:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Reflection;
    using System.Text;
    using System.Threading.Tasks;
    using System.Xml;
    
    namespace GetRequestRawXmlForWebServiceDemo
    {
        /// <summary>
        /// 获取客户端调用WebService时生成的原生的请求xml字符串,可以直接在SoapUI中使用
        /// 斯内科 2022-06-19
        /// </summary>
        public class SoapUtil
        {
            /// <summary>
            /// 获取请求WebService原生的XML
            /// </summary>
            /// <typeparam name="TWebService">一个WebService类,继承于SoapHttpClientProtocol</typeparam>
            /// <param name="methodName">接口方法名</param>
            /// <param name="parameters">实参列表需和接口方法定义的参数类型和个数一致,无参数时一定要传入null</param>
            /// <param name="defaultNamespace">Xml命名空间,可以是任意的</param>
            /// <returns></returns>
            public static string GetRawXml<TWebService>(string methodName, object[] parameters, string defaultNamespace = "web") where TWebService : System.Web.Services.Protocols.SoapHttpClientProtocol
            {
                Type t = typeof(TWebService);
                MethodInfo methodInfo = t.GetMethod(methodName);
                ParameterInfo[] parameterInfos = methodInfo.GetParameters();
                System.Web.Services.WebServiceBindingAttribute webServiceBindingAttribute = t.GetCustomAttribute<System.Web.Services.WebServiceBindingAttribute>();
                if (webServiceBindingAttribute == null)
                {
                    throw new Exception($"不是标准的WebService类名,没有找到特性WebServiceBindingAttribute");
                }
                System.Web.Services.Protocols.SoapDocumentMethodAttribute soapDocumentAttribute = methodInfo.GetCustomAttribute(typeof(System.Web.Services.Protocols.SoapDocumentMethodAttribute))
                    as System.Web.Services.Protocols.SoapDocumentMethodAttribute;
                if (soapDocumentAttribute == null)
                {
                    throw new Exception($"不是标准的WebService接口方法,没有找到特性SoapDocumentMethodAttribute");
                }
                if (!(parameterInfos.Length == 0 && parameters == null)
                    && !(parameters != null && parameterInfos.Length == parameters.Length))
                {
                    throw new Exception($"如果是无参数的方法,传入的参数值必须为null。如果是有参数的方法,实参个数必须与接口定义参数个数一致");
                }
                //string defaultNamespace = "web";//Xml命名空间,可以是任意的
                StringBuilder sb = new StringBuilder();
                //methodName方法名下的每个参数名
                for (int i = 0; i < parameterInfos.Length; i++)
                {
                    string paraName = parameterInfos[i].Name;
                    Type type = parameterInfos[i].ParameterType;
                    if ((type.IsArray || type.IsClass) && type != typeof(string))
                    {
                        string xmlTemp = XmlSerializeUtil.XmlSerialize(parameters[i]);
                        XmlDocument xmlDoc = new XmlDocument();
                        xmlDoc.LoadXml(xmlTemp);
                        string parameterXml = xmlDoc.DocumentElement.InnerXml;
                        sb.AppendLine($"<{defaultNamespace}:{paraName}>{parameterXml}</{defaultNamespace}:{paraName}>");
                    }
                    else
                    {
                        sb.AppendLine($"<{defaultNamespace}:{paraName}>{parameters[i]}</{defaultNamespace}:{paraName}>");
                    }
                }
                string requestNamespace = soapDocumentAttribute.RequestNamespace;//请求XML命名空间
                if (string.IsNullOrWhiteSpace(requestNamespace))
                {
                    requestNamespace = webServiceBindingAttribute.Namespace;
                }
                string parameterArrayXml = sb.ToString().Trim();
                string requestXml = $@"<soapenv:Envelope xmlns:soapenv=""http://schemas.xmlsoap.org/soap/envelope/"" xmlns:{defaultNamespace}=""{requestNamespace}"">
       <soapenv:Header/>
       <soapenv:Body>
                  <{defaultNamespace}:{methodName}>{parameterArrayXml}</{defaultNamespace}:{methodName}>
       </soapenv:Body>
    </soapenv:Envelope>";
                //return requestXml;
                string formattedXml = XmlSerializeUtil.FormatXml(requestXml);
                return formattedXml;
            }
        }
    }
    

    窗体FormGetRequestRawXml主要程序如下:

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Windows.Forms;
    
    namespace GetRequestRawXmlForWebServiceDemo
    {
        public partial class FormGetRequestRawXml : Form
        {
            public FormGetRequestRawXml()
            {
                InitializeComponent();
            }
    
            private void btnGetRequestXml_Click(object sender, EventArgs e)
            {
                rtxtRequestXml.Clear();
                try
                {
                    rtxtRequestXml.AppendText("-----------------------第一个请求原生Xml:【中->英】-----------------------\n");
                    TranslatorWebService.TranslatorWebService translatorWebService = new TranslatorWebService.TranslatorWebService();
                    translatorWebService.Url = "http://www.webxml.com.cn/WebServices/TranslatorWebService.asmx?wsdl";
                    translatorWebService.Timeout = 8000;
                    string word = "中国";
                    string xml = SoapUtil.GetRawXml<TranslatorWebService.TranslatorWebService>("getEnCnTwoWayTranslator", new object[] { word });
                    rtxtRequestXml.AppendText(xml);
                    string[] resultArray = translatorWebService.getEnCnTwoWayTranslator(word);
                    MessageBox.Show(string.Join("\n", resultArray), "【中->英】翻译结果");
    
                    rtxtRequestXml.AppendText("\n\n-----------------------第二个请求原生Xml:【英->中】-----------------------\n\n");
    
                    word = "observer";
                    xml = SoapUtil.GetRawXml<TranslatorWebService.TranslatorWebService>("getEnCnTwoWayTranslator", new object[] { word });
                    rtxtRequestXml.AppendText(xml);
                    resultArray = translatorWebService.getEnCnTwoWayTranslator(word);
                    MessageBox.Show(string.Join("\n", resultArray), "【英->中】翻译结果");
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message, "出错");
                }
            }
        }
    }
    

    运行结果如图:

     我们可以直接复制请求xml到SoapUI中进行测试,如图:

     

     

    展开全文
  • 基于CXF开发的java端接口,部署到服务器上,偶尔出现这样的问题:客户那边提示我已经调用过接口了,但是我没有收到返回值,也没有生成调用日志。 调用客户接口之前,首先我会将收到的参数封装成json字符串,然后将...
  • C#Post带参数请求+WebService接口方法:string HttpPostWebService(string url, string method, string num1, string num2)调用创建WebService接口 方法:string HttpPostWebService(string url, string method, ...

    方法:string HttpPostWebService(string url, string method, string num1, string num2)

    string HttpPostWebService(string url, string method, string num1, string num2)
            {
                string result = string.Empty;
                string param = string.Empty;
                byte[] bytes = null;
    
                Stream writer = null;
                HttpWebRequest request = null;
                HttpWebResponse response = null;
    
                param = HttpUtility.UrlEncode("inta") + "=" + HttpUtility.UrlEncode(num1) + "&" + HttpUtility.UrlEncode("intb") + "=" + HttpUtility.UrlEncode(num2);
                bytes = Encoding.UTF8.GetBytes(param);
    
                request = (HttpWebRequest)WebRequest.Create(url + "/" + method);
                request.Method = "POST";
                request.ContentType = "application/x-www-form-urlencoded";
                request.ContentLength = bytes.Length;
    
                try
                {
                    writer = request.GetRequestStream();        //获取用于写入请求数据的Stream对象
                }
                catch (Exception ex)
                {
                    return "";
                }
    
                writer.Write(bytes, 0, bytes.Length);       //把参数数据写入请求数据流
                writer.Close();
    
                try
                {
                    response = (HttpWebResponse)request.GetResponse();      //获得响应
                }
                catch (WebException ex)
                {
                    return "";
                }
    
                #region 这种方式读取到的是一个返回的结果字符串
                Stream stream = response.GetResponseStream();        //获取响应流
                XmlTextReader Reader = new XmlTextReader(stream);
                Reader.MoveToContent();
                result = Reader.ReadInnerXml();
                #endregion
    
                #region 这种方式读取到的是一个Xml格式的字符串
                //StreamReader reader = new StreamReader(response.GetResponseStream(), Encoding.UTF8);
                //result = reader.ReadToEnd();
                #endregion 
    
                response.Dispose();
                response.Close();
    
                //reader.Close();
                //reader.Dispose();
    
                Reader.Dispose();
                Reader.Close();
    
                stream.Dispose();
                stream.Close();
    
                return result;
            }
    

    调用

     string url = "http://localhost:50619/WebService.asmx";
                    string method = "AddIton";
                    string num1 = "1";
                    string num2 = "2";
                    string result = HttpPostWebService(url, method, num1, num2);
    

    创建WebService接口

    /// <summary>
        /// WebService 的摘要说明
        /// </summary>
        [WebService(Namespace = "http://tempuri.org/")]
        [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
        [System.ComponentModel.ToolboxItem(false)]
        // 若要允许使用 ASP.NET AJAX 从脚本中调用此 Web 服务,请取消注释以下行。 
        //[System.Web.Script.Services.ScriptService]
        public class WebService : System.Web.Services.WebService
        {
            public WebService()
            {
    
            }
            [WebMethod(MessageName ="AddIton",Description ="加法")]
            public int AddIton(int inta,int intb)
            {
                return inta+ intb;
            }
    
            [WebMethod]
            [ScriptMethod(UseHttpGet = true, ResponseFormat = ResponseFormat.Json)]
            public void HelloJson()
            {
                Context.Response.Clear();
                Context.Response.ContentType = "application/json";
                Context.Response.Write("{\"sResult\":\"1\",\"sMessage\":\"成品料号:  请联系人员处理\"}");
            }
            #region 接口说明:"WebService接口"
    
            public  Dictionary<String, String> MaterialArry = new Dictionary<String, String>();
            string Messages = "";
            [WebMethod(Description = "WebService接口")]     
            public void WSInterface()
            {
                string jsontext = string.Empty;
                string jsonReturn = string.Empty;
                try
                {
                    Stream s = HttpContext.Current.Request.InputStream;//获得json 字符流,? ??
                    string usr = HttpContext.Current.Request.Headers["key"];//获得header 下key的值
                    string opid = HttpContext.Current.Request.Headers["opid"];//获得header 下opid的值
                    byte[] b = new byte[s.Length];
                    s.Position = 0;
                    s.Read(b, 0, (int)s.Length);
                    jsontext = Encoding.UTF8.GetString(b);
                    string message = jsontext;
                    Messages = message;
                    MaterialArry = JsonConvert.DeserializeObject<Dictionary<String, String>>(Messages);
                    try
                    {
                        if (string.IsNullOrEmpty(message.Trim()))
                        {
                            throw new Exception("请求参数为空。");
                        }
                        jsonReturn = "{\"sResult\":\"1\",\"sMessage\":\"成品料号: 02.GB002.0001B\"}";
                    }
                    catch (Exception ex)
                    {
                        jsonReturn = "{\"sResult\":\"0\",\"sMessage\":\"成品料号: 02.GB002.0001A\"}";
                    }
                }
                finally
                {
                    Context.Response.Clear();
                    Context.Response.Write(jsonReturn);
                    //之前测试Context.Response.End(); 总是报错然后替换成如下后可以跳过异常
                    Context.Response.Flush();
                    Context.Response.SuppressContent = true;
                    HttpContext.Current.ApplicationInstance.CompleteRequest();
                }
            }
            #endregion
    
            [WebMethod(Description = "MaterialLoading接口")]    
            public void MaterialLoading(string sJson)
            {
                string jsonReturn = string.Empty;
                try
                {
                    string usr = HttpContext.Current.Request.Headers["key"];//获得header 下key的值
                    string opid = HttpContext.Current.Request.Headers["opid"];//获得header 下opid的值             
                    string message = sJson;
                    Messages = message;
                    MaterialArry = JsonConvert.DeserializeObject<Dictionary<String, String>>(Messages);
                    try
                    {
                        if (string.IsNullOrEmpty(message.Trim()))
                        {
                            throw new Exception("请求参数为空。");
                        }
                        jsonReturn = "{\"sResult\":\"1\",\"sMessage\":\"成品料号: MaterialLoading\"}";
                    }
                    catch (Exception ex)
                    {
                        jsonReturn = "{\"sResult\":\"0\",\"sMessage\":\"成品料号: MaterialLoading\"}";
                    }
                }
                finally
                {
                    Context.Response.Clear();
                    Context.Response.Write(jsonReturn);
                    //之前测试Context.Response.End(); 总是报错然后替换成如下后可以跳过异常
                    Context.Response.Flush();
                    Context.Response.SuppressContent = true;
                    HttpContext.Current.ApplicationInstance.CompleteRequest();
                }
            }
    
            [WebMethod(Description = "TwsLotInputForJson接口")]
            public void TwsLotInputForJson(string sJson)
            {
                string jsonReturn = string.Empty;
                try
                {
                    string usr = HttpContext.Current.Request.Headers["key"];//获得header 下key的值
                    string opid = HttpContext.Current.Request.Headers["opid"];//获得header 下opid的值
    
                    string message = sJson;
                    Messages = message;
                    MaterialArry = JsonConvert.DeserializeObject<Dictionary<String, String>>(Messages);
                    try
                    {
                        if (string.IsNullOrEmpty(message.Trim()))
                        {
                            throw new Exception("请求参数为空。");
                        }
                        jsonReturn = "{\"sResult\":\"1\",\"sMessage\":\"成品料号: TwsLotInputForJson\"}";
                    }
                    catch (Exception ex)
                    {
                        jsonReturn = "{\"sResult\":\"0\",\"sMessage\":\"成品料号: TwsLotInputForJson\"}";
                    }
                }
                finally
                {
                    Context.Response.Clear();
                    Context.Response.Write(jsonReturn);
                    //之前测试Context.Response.End(); 总是报错然后替换成如下后可以跳过异常
                    Context.Response.Flush();
                    Context.Response.SuppressContent = true;
                    HttpContext.Current.ApplicationInstance.CompleteRequest();
                }
            }
        }
    

    链接: https://download.csdn.net/download/qq_29714537/85441914.

    展开全文
  • API接口之webservice接口

    千次阅读 2022-04-28 17:13:36
    一、准备工作:apache cxf,axis,httpclient等,目前流行是用cxf,本节也是用cxf实现 ...1.webservice在项目中的配置,如下: <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springfram

    一、准备工作:apache cxf,axis,httpclient等,目前流行是用cxf,本节也是用cxf实现

    1.引入apache cxf包,点击----->apache-cxf-2.6.16下载

    2.下载完成后解压放入项目lib目录下重新编译,如下图

    二、实现方法:

    1.webservice在项目中的配置,如下:

    <?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-3.0.xsd 
    	
    	http://cxf.apache.org/jaxws 
        http://cxf.apache.org/schemas/jaxws.xsd">
    	
    	<import resource="classpath:META-INF/cxf/cxf.xml"/>
    	<import resource="classpath:META-INF/cxf/cxf-extension-soap.xml"/>
    	<import resource="classpath:META-INF/cxf/cxf-servlet.xml"/>
    	
    	<!-- 企业信息同步接口 -->
    	<bean id="companyImpl" class="com.hontek.webservice.service.impl.CompanyImpl">
    		<property name="interAccountDao" ref="interAccountDao"/>
    		<property name="enterpriseDao" ref="enterpriseDao"/>
    		<property name="proTypeDao" ref="proTypeDao"/>
    		<property name="proTypeQrcodeDao" ref="proTypeQrcodeDao"/>
    		<property name="enterprseService" ref="enterprseService"/>
    		<property name="proTypeBatchDao" ref="proTypeBatchDao"/>
    		<property name="orderService" ref="orderService"/>
    		<property name="zizhiDao" ref="zizhiDao"/>
    		<property name="zizhiTypeDao" ref="zizhiTypeDao"/>
    		<property name="zizhiAppendixDao" ref="zizhiAppendixDao"/>
    		<property name="productServiceInter" ref="productService"/>
    		<property name="traceService" ref="traceService"/>
    		<property name="certificateDao" ref="certificateDao"/>
    		<property name="certificateCheckDao" ref="certificateCheckDao"/>
    		<property name="certificatePrintDao" ref="certificatePrintDao"/>
    		<property name="certificateScanDao" ref="certificateScanDao"/>
    		
    	</bean>
    	
    	<jaxws:server serviceClass="com.hontek.webservice.service.inter.CompanyInter" address="/company">
    		<jaxws:serviceBean>
    			<ref bean="companyImpl"/>
    		</jaxws:serviceBean>
    	</jaxws:server>
    
    
    	<!-- 检测设备接口 -->
    	<bean id="detectionDeviceImpl" class="com.hontek.devicewebservice.service.impl.DetectionDeviceImpl">
    		<property name="userDao" ref="userDao"/>
    		<property name="enterpriseDao" ref="enterpriseDao"/>
    		<property name="checkEquipmentDao" ref="checkEquipmentDao"/>
    		<property name="proTypeQrcodeDao" ref="proTypeQrcodeDao"/>
    		<property name="checkInfoDao" ref="checkInfoDao"/>
    		<property name="checkInfoDetailDao" ref="checkInfoDetailDao"/>
    		<property name="proTypeDao" ref="proTypeDao"/>
    		<property name="spotCheckDao" ref="spotCheckDao"/>
    		<property name="orderService" ref="orderService"/>
    		<property name="dimennoRecordService" ref="dimennoRecordService"/>
    		<property name="certificateService" ref="certificateServiceInter"/>
    		<property name="caInfoDao" ref="caInfoDao"/>
    		<property name="certificateCheckDao" ref="certificateCheckDao"/>
    	</bean>
    
    	<jaxws:server serviceClass="com.hontek.devicewebservice.service.inter.DetectionDeviceInter" address="/detectionDevice">
    		<jaxws:serviceBean>
    			<ref bean="detectionDeviceImpl"/>
    		</jaxws:serviceBean>
    	</jaxws:server>
    
    	<!-- 圳品、菜篮子平台对接接口 -->
    	<bean id="platformsImpl" class="com.hontek.platformswebservice.service.impl.PlatformsImpl">
    		<property name="interAccountDao" ref="interAccountDao"/>
    		<property name="enterprseService" ref="enterprseService"/>
    		<property name="certificateServiceInter" ref="certificateServiceInter"/>
    		<property name="proTypeDao" ref="proTypeDao"/>
    		<property name="enterpriseDao" ref="enterpriseDao"/>
    		<property name="proTypeQrcodeDao" ref="proTypeQrcodeDao"/>
    		<property name="caInfoDao" ref="caInfoDao"/>
    		<property name="userDao" ref="userDao"/>
    		<property name="spotCheckDao" ref="spotCheckDao"/>
    		<property name="checkReportDao" ref="checkReportDao"/>
    		<property name="checkContentDao" ref="checkContentDao"/>
    		<property name="xydaAppendixDao" ref="xydaAppendixDao"/>
    		<property name="checkInfoDao" ref="checkInfoDao"/>
    		<property name="checkInfoDetailDao" ref="checkInfoDetailDao"/>
    	</bean>
    
    	<jaxws:server serviceClass="com.hontek.platformswebservice.service.inter.PlatformsInter" address="/platform">
    		<jaxws:serviceBean>
    			<ref bean="platformsImpl"/>
    		</jaxws:serviceBean>
    	</jaxws:server>
    	
    	
    	
    </beans> 
    

    ps apache-cxf-2.6.16版本需要在上面配置文件中加入下面三行

    	<import resource="classpath:META-INF/cxf/cxf.xml"/>
    	<import resource="classpath:META-INF/cxf/cxf-extension-soap.xml"/>
    	<import resource="classpath:META-INF/cxf/cxf-servlet.xml"/>
    

    注意:如果你的版本是3.0以上的,因为多了下面两个xml文件,所以也会报错;只需要引入第一个就可以;如果你的CXF版本是3.0以下;那么需要引入三个配置文件。

    2. 配置applicationContext.xml,如下:

    3. 配置web.xml,如下:

    4.创建webservice接口,如下:

    package com.hontek.platformswebservice.service.inter;
    import com.hontek.platformswebservice.comm.*;
    import javax.jws.WebParam;
    import javax.jws.WebService;
    import javax.jws.soap.SOAPBinding;
    import javax.jws.soap.SOAPBinding.Style;
    import java.util.List;
    
    @WebService
    @SOAPBinding(style = Style.RPC)
    @SuppressWarnings("deprecation")
    public interface PlatformsInter {
    	
    	/**
    	 * 获取口令
    	 * @Author yang
    	 * @Date   2020/05/06 16:55
    	 **/
    	public String getToken(@WebParam(name="account")String account,@WebParam(name="password")String password);
    
    	/**
    	 * 更新心跳接口
    	 * @Author yang
    	 * @Date   2020/05/06 16:59
    	 **/
    	public String active(@WebParam(name = "token") String token);
    
    	/**
    	 * 退出接口
    	 * @Author yang
    	 * @Date   2020/05/06 16:59
    	 **/
    	public String logout(@WebParam(name = "token") String token);
    
    	/**
    	 * 同步产品信息
    	 * @Author yang
    	 * @Date   2020/05/07 18:07
    	 **/
    	public String syncProTypeQrCode(@WebParam(name="token")String token, @WebParam(name="proTypeQrcode") ProTypeQrcodeEntity proTypeQrcode);
    }
    
    

     4.1创建ResultInfo返回结果实体类,如下:

    package com.hontek.platformswebservice.comm;
    
    /**
     * 返回结果实体类
     * @Author yang
     **/
    public class ResultInfo {
    
    	private String code;		//code码
    	private boolean success;	// 判断调用是否成功 true:成功 false:失败
    	private Object data;		// 数据
    	private String msg;			// 信息
    
    	public String getCode() { return code; }
    	public void setCode(String code) { this.code = code; }
    	public boolean isSuccess() { return success; }
    	public void setSuccess(boolean success) { this.success = success; }
    	public Object getData() { return data; }
    	public void setData(Object data) { this.data = data; }
    	public String getMsg() { return msg; }
    	public void setMsg(String msg) { this.msg = msg; }
    
    }
    
    

    4.2创建SoleManager线程类实现token过期时间及更新和销毁,如下:

    package com.hontek.platformswebservice.comm;
    
    import com.hontek.sys.pojo.TbInterAccount;
    import java.util.HashMap;
    import java.util.Iterator;
    import java.util.Map;
    import java.util.Set;
    
    
    public class SoleManager {
    
    	static final private SoleManager instance = new SoleManager();
    
    	private Map<String, TbInterAccount> accountMap = new HashMap<String, TbInterAccount>();
    
    	public static SoleManager getInstance(){
    		return instance;
    	 }
    
    	public SoleManager() {
    		TimeOut timeout = new TimeOut();
    		timeout.start();
    	}
    	
    	synchronized public TbInterAccount getAccount(String token){
    		TbInterAccount interAccount = accountMap.get(token);
    		if(interAccount!=null)
    			interAccount.setTime(System.currentTimeMillis());
    		return interAccount;
    	}
    	
    	synchronized public void putAccount(String token,TbInterAccount interAcount){
    		this.accountMap.put(token, interAcount);
    	}
    
    	
    	public class TimeOut extends Thread{
    		public void run(){
    			long keepTime = 1000L*60*60*10;
    			
    			while(true){
    				try {
    					Thread.sleep(1000*60*60*3);
    				} catch (InterruptedException e) {
    					e.printStackTrace();
    				}
    				
    				Set<String> setKey = accountMap.keySet();
    				Iterator<String> it = setKey.iterator();
    				while(it.hasNext()){
    					String key = it.next();
    					TbInterAccount interAccount = accountMap.get(key);
    					if(System.currentTimeMillis()-interAccount.getTime()>keepTime){
    						accountMap.remove(key);
    					}
    				}
    				
    			}
    		}
    	}
    	
    	/**
    	 * 心跳
    	 * @param interaccount
    	 */
    	public void active(TbInterAccount interaccount){
    		if(interaccount!=null){
    			interaccount.setTime(System.currentTimeMillis());
    		}
    	}
    	/**
    	 * 注销
    	 * @param token
    	 */
    	synchronized public void cleanMap(String token){
    		TbInterAccount interAccount = accountMap.get(token);
    		if(interAccount!=null){
    		    interAccount = null;
    		    accountMap.remove(token);
    		}
    	}
    }
    
    

    5.发布接口

    *访问路径:域名/项目/CXFService/platform?wsdl,出现如下xml格式的数据说明发布成功*
    

    6.测试

    6.1idea中创建webservice客户端进行测试,如下:

    6.2使用测试工具如postman、SoapUI Pro 5.1.2进行测试,如下是soapui进行测试: 

     7.总结

    前期接口写好后首先自己先测试下看看代码有无问题是否能调通接口,如没问题,接下来最好是写一份对接文档进行说明(如下图),再一个跟对三方进行对接时要先在测试环境或者自己本地服务器进行联调(使用内网穿透,我这边使用的是花生壳进行内网穿透),最后发布到正式环境中。

    三、客户端调用

    1:本地生成代码,直接调用:
    1:新建一个class类,用于调用webservice。右键src,找到Web Service Client,并输入wsdl地址,选择下载代码的路径;

    (url: http://192.168.1.105:8080/Service/ServiceHello?wsdl) 

    2.将地址上的文件下载下来(注意和发布JDK一致); 
    3.写调用方法调用下载下来的WebService中的java类中的方法; 
    示例:

    import com.pcm.ws.jws.JwsServiceHello;
    import com.pcm.ws.jws.JwsServiceHelloService;
     
    /**
     * 
    * Title: JwsClientHello
    * Description: webService 客户端调用
    * Version:1.0.0  
    * @author panchengming
     */
    public class JwsClientHello {
     
        public static void main(String[] args) {
             //调用webservice
            JwsServiceHello hello=new JwsServiceHelloService().getJwsServiceHelloPort();
            String name=hello.getValue("panchengming");
            System.out.println(name);
        }
    }


    2、利用dos命令生成代码,和第一种基本一致
    A、在工作空间创建用于存放使用wsimport命令生成的客户端代码的java工程

    B、使用jdk提供的wsimport命令生成客户端代码

    ●  wsimport命令是jdk提供的,作用是根据使用说明书生成客户端代码,wsimport只支持SOAP1.1客户端的生成

    ●  wsimport常用参数

    -d:默认参数,用于生成.class文件
    -s:生成.java文件
    -p:指定生成java文件的包名,不指定则为WSDL说明书中namespace值得倒写

    C、在doc窗口进入java工程项目的src目录,执行wsimport命令

    D、在Eclipse中刷新java项目,将生成的客户端代码copy到客户端工程中

    E、创建服务视图,类名从<service>标签的name属性获取

    F、获取服务实现类,视图实例调用getProt()方法,实现类的类名从portType的name属性获取

    G、调用查询方法,方法名从portType下的operation标签的name属性获取

    package com.webservice.client;
     
     
    import com.webservice.jaxws.WeatherServiceImpl;
     
    import com.webservice.jaxws.WeatherServiceImplService;
     
     
    public class Client {
     
     
    public static void main(String[] args) {
     
    //创建视图
     
    WeatherServiceImplService wsis = new WeatherServiceImplService();
     
    //获取服务实现类
     
    WeatherServiceImpl wsi = wsis.getPort(WeatherServiceImpl.class);
     
    //调用查询方法
     
    String weather = wsi.queryWeather("北京");
     
    System.out.println(weather);
     
    }
     
    }

    <service>    服务视图,webservice的服务结点,它包括了服务端点

    ●   <binding>     为每个服务端点定义消息格式和协议细节

    ●   <portType>   服务端点,描述 web service可被执行的操作方法,以及相关的消息,通过binding指向portType

    ●   <message>   定义一个操作(方法)的数据参数(可有多个参数)

    ●   <types>        定义 web service 使用的全部数据类型
     

    3:service编程实现调用
    注意:
    (1)该种方式可以自定义关键元素,方便以后维护,是一种标准的开发方式;
    (2)这种方式同样需要wsimport生成客户端代码,只不过仅需要将服务接口类引入即可,例如如果需要<wsdl:port name="MobileCodeWSSoap" binding="tns:MobileCodeWSSoap">端口服务,则需要将生成的MobileCodeWSSoap.class类引入;

    (1)、开发步骤

    A、wisimport生成客户端代码

    B、使用serivce类创建服务视图

    C、获取服务实现类

    D、调用查询方法
     

    import java.io.IOException;  
    import java.net.MalformedURLException;  
    import java.net.URL;  
      
    import javax.xml.namespace.QName;  
    import javax.xml.ws.Service;  
      
    import cn.itcast.mobile.MobileCodeWSSoap;  
      
    /** 
     *  
     *  Title: ServiceClient.java
     *  Description:Service编程实现服务端调用
     *  这种方式同样需要wsimport生成客户端代码,只不过仅需要将服务接口类引入即可,例如如果需要
     *  <wsdl:port name="MobileCodeWSSoap" binding="tns:MobileCodeWSSoap">
     *  端口服务,则需要将生成的MobileCodeWSSoap.class类引入
     */  
    public class ServiceClient {  
      
        public static void main(String[] args) throws IOException {  
            //创建WSDL地址,不是服务地址  
            URL url = new URL("http://webservice.webxml.com.cn/WebServices/MobileCodeWS.asmx?wsdl");  
            //创建服务名称  
            //1.namespaceURI - 命名空间地址 (wsdl文档中的targetNamespace)
            //2.localPart - 服务视图名  (wsdl文档中服务名称,例如<wsdl:service name="MobileCodeWS">)
            QName qname = new QName("http://WebXml.com.cn/", "MobileCodeWS");  
              
            //Service创建视图  
            //参数:  
            //1.wsdlDocumentLocation - 使用说明书地址  
            //2.serviceName - 服务名称  
            Service service = Service.create(url, qname);  
           //获取服务实现类 
            //参数解释:serviceEndpointInterface - 服务端口(wsdl文档中服务端口的name属性,例如<wsdl:port name="MobileCodeWSSoap" binding="tns:MobileCodeWSSoap">)
            MobileCodeWSSoap mobileCodeWSSoap = service.getPort(MobileCodeWSSoap.class);  
            //调用查询方法  
            String result = mobileCodeWSSoap.getMobileCodeInfo("188888888", "");  
            System.out.println(result);  
        }  
    }

    4:利用apache的AXIS直接调用远程的web service

    public static void axis() {
            Service service = new Service();
            try {
                Call call = (Call) service.createCall();
                //设置地址
                call.setTargetEndpointAddress("http://www.webxml.com.cn/WebServices/ValidateEmailWebService.asmx?wsdl");
                call.setUseSOAPAction(true);
     
                //域名加方法,//上面有写着targetNamespace="http://x.x.x/",这个就是你的命名空间值了;加方法名
                call.setSOAPActionURI("http://WebXml.com.cn/" + "ValidateEmailAddress");
     
     
                // 设置要调用哪个方法
                call.setOperationName(new QName("http://WebXml.com.cn/", "ValidateEmailAddress")); // 设置要调用哪个方法
                //设置参数名 :参数名 ,参数类型:String, 参数模式:'IN' or 'OUT'
                call.addParameter(new QName("http://WebXml.com.cn/", "theEmail"), // 设置要传递的参数
                        org.apache.axis.encoding.XMLType.XSD_STRING, javax.xml.rpc.ParameterMode.IN);
     
                call.setEncodingStyle("UTF-8");
                //返回类型
                call.setReturnType(org.apache.axis.encoding.XMLType.XSD_STRING);// (标准的类型)
     
                // 调用方法并传递参数
                String res = String.valueOf(call.invoke(new Object[]{"wangkanglu1024@163.com"}));
                System.out.println(res);
     
            } catch (Exception ex) {
                ex.printStackTrace();
            }

     public static void axis2() throws MalformedURLException, SOAPException, ServiceException, RemoteException {
            String endpoint = "http://ws.webxml.com.cn/WebServices/MobileCodeWS.asmx?wsdl";
            String res = null;
            // 查询电话号码的接口方法名
            String operationName = "getMobileCodeInfo";
            // 定义service对象
            Service service = new Service();
            // 创建一个call对象
            Call call = (Call) service.createCall();
            // 设置目标地址,即webservice路径
            call.setTargetEndpointAddress(endpoint);
            // 设置操作名称,即方法名称   targetNamespace="http://WebXml.com.cn/"
            call.setOperationName(new QName("http://WebXml.com.cn/", operationName));
            // 设置方法参数
            call.addParameter(new QName("http://WebXml.com.cn/", "mobileCode"),
                    org.apache.axis.encoding.XMLType.XSD_STRING,
                    javax.xml.rpc.ParameterMode.IN);
            call.addParameter(new QName("http://WebXml.com.cn/", "userID"),
                    org.apache.axis.encoding.XMLType.XSD_STRING,
                    javax.xml.rpc.ParameterMode.IN);
            // 设置返回值类型
            //对于返回是字符串数组的返回类型只有这两种可行
     
            //call.setReturnType(org.apache.axis.encoding.XMLType.SOAP_VECTOR);
            call.setReturnClass(java.lang.String.class);
     
            call.setUseSOAPAction(true);
            call.setSOAPActionURI("http://WebXml.com.cn/" + "getMobileCodeInfo");
     
            res = (String) call.invoke(new Object[]{"15611111111", "0"});
     
            // 如果返回类型是org.apache.axis.encoding.XMLType.SOAP_VECTOR时用下面的转型接收
            //Vector v=(Vector) call.invoke(new Object[]{cityCode,userId});
     
            System.out.println(res);
     
        }

    5:HttpURLConnection调用方式
    (1)、开发步骤

    A、创建服务地址

    B、打开服务地址的一个连接

    C、设置连接参数

    ●   注意

    a、POST必须大写,如果小写会出如下异常:
     b、如果不设置输入输出,会报异常
    D、组织SOAP协议数据,发送给服务器

    E、接收服务端的响应
     

    import java.io.BufferedReader;  
    import java.io.IOException;  
    import java.io.InputStream;  
    import java.io.InputStreamReader;  
    import java.io.OutputStream;  
    import java.net.HttpURLConnection;  
    import java.net.MalformedURLException;  
    import java.net.URL;  
      
    /**
     * 
    * @ClassName: HttpURLConectionMode 
    * @Description: TODO(通过HttpURLConnection发送http请求) 
    *   sope协议,比较麻烦的是需要拼接xml格式的请求数据
    * @author
    * @date 2017年11月8日 上午9:18:24 
    *
     */
    public class HttpClient {  
      
        public static void main(String[] args) throws IOException {  
            //第一步:创建服务地址,不是WSDL地址 
            URL url = new URL("http://webservice.webxml.com.cn/WebServices/MobileCodeWS.asmx");  
            //2:打开到服务地址的一个连接  
            HttpURLConnection connection = (HttpURLConnection) url.openConnection();  
            //3:设置连接参数  
            //3.1设置发送方式:POST必须大写  
            connection.setRequestMethod("POST");  
            //3.2设置数据格式:Content-type  
            connection.setRequestProperty("content-type", "text/xml;charset=utf-8");  
            //3.3设置输入输出,新创建的connection默认是没有读写权限的,  
            connection.setDoInput(true);  
            connection.setDoOutput(true);  
      
            //4:组织SOAP协议数据,发送给服务端  
            String soapXML = getXML("1866666666");  
            OutputStream os = connection.getOutputStream();  
            os.write(soapXML.getBytes());  
              
            //5:接收服务端的响应  
            int responseCode = connection.getResponseCode();  
            if(200 == responseCode){//表示服务端响应成功  
                InputStream is = connection.getInputStream();  
                InputStreamReader isr = new InputStreamReader(is);  
                BufferedReader br = new BufferedReader(isr);  
                  
                StringBuilder sb = new StringBuilder();  
                String temp = null;  
                  
                while(null != (temp = br.readLine())){  
                    sb.append(temp);  
                }  
                  
                System.out.println(sb.toString());  
                  
                is.close();  
                isr.close();  
                br.close();  
            }  
      
            os.close();  
        }  
          
        /** 
         * <?xml version="1.0" encoding="utf-8"?> 
            <soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> 
                <soap:Body> 
                    <getMobileCodeInfo xmlns="http://WebXml.com.cn/"> 
                        <mobileCode>string</mobileCode> 
                        <userID>string</userID> 
                    </getMobileCodeInfo> 
                </soap:Body> 
            </soap:Envelope> 
         * @param phoneNum 
         * @return 
         */  
        public static String getXML(String phoneNum){  
            String soapXML = "<?xml version=\"1.0\" encoding=\"utf-8\"?>"  
            +"<soap:Envelope xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\">"  
                +"<soap:Body>"  
                +"<getMobileCodeInfo xmlns=\"http://WebXml.com.cn/\">"  
                    +"<mobileCode>"+phoneNum+"</mobileCode>"  
                  +"<userID></userID>"  
                +"</getMobileCodeInfo>"  
             +" </soap:Body>"  
            +"</soap:Envelope>";  
            return soapXML;  
        }  
    }  

    提供一个比较完善一点的工具类

    public Map<String, Object> webServiceRequestUtil(String requesturl, String soapXML) throws IOException, ZycxException {
           
            HttpURLConnection connection = null;
            OutputStream os = null;
            Map<String, Object> reslut = new HashMap<>();
     
            try {
                //1:创建服务地址
                URL url = new URL(requesturl);
                //2:打开到服务地址的一个连接
                connection = (HttpURLConnection) url.openConnection();
                //3:设置连接参数
                //3.1设置发送方式:POST必须大写
                connection.setRequestMethod("POST");
                //3.2设置数据格式:Content-type
                connection.setRequestProperty("content-type", "text/xml;charset=utf-8");
                //3.3设置输入输出,新创建的connection默认是没有读写权限的,
                connection.setDoInput(true);
                connection.setDoOutput(true);
     
                //4:组织SOAP协议数据,发送给服务端
                os = connection.getOutputStream();
                os.write(soapXML.getBytes());
            } catch (IOException e) {
                throw new myException("链接webservice出错!url为:" + requesturl + ";exception:" + e);
            }
            
            StringBuilder sb = new StringBuilder();
            InputStream is = null;
            InputStreamReader isr = null;
            BufferedReader br = null;
            try {
                String temp = null;
                //5:接收服务端的响应
                int responseCode = connection.getResponseCode();
                
                if (200 == responseCode) {//表示服务端响应成功
                    is = connection.getInputStream();
                    isr = new InputStreamReader(is);
                    br = new BufferedReader(isr);
     
                    while ((temp = br.readLine()) != null) {
                        sb.append(temp);
                    }
     
                   //这是我自己封装了一个map的返回格式,封装了headr和body
                    reslut = ReturnUtil.returnjSON(BackStatus.BACK_STATUS_OK, "success", sb.toString());
                } else {
                    is = connection.getInputStream();
                    isr = new InputStreamReader(is);
                    br = new BufferedReader(isr);
     
                    while ((temp = br.readLine()) != null) {
                        sb.append(temp);
                    }
                    reslut = ReturnUtil.returnjSON(BackStatus.BACK_STATUS_EXCEPTION + "", "请求出错,http响应为:"+responseCode, sb.toString());
                
                }
            } catch (IOException e) {
                throw new myException("返回结果解析出错" + e);
            } finally {
                if(!Objects.isNull(br)){
                    br.close();
                }
                if(!Objects.isNull(isr)){
                    isr.close();
                }
                if(!Objects.isNull(is)){
                    is.close();
                }
                if(!Objects.isNull(os)){
                    os.close();
                }
            }
     
            
            return reslut;
        }

    6.Ajax调用方式 

     
    <!doctype html>  
    <html lang="en">  
     <head>  
      <title>Ajax调用方式</title>  
      <script type="text/javascript">  
        function queryMobile(){  
            //创建XMLHttpRequest对象  
            var xhr = new XMLHttpRequest();  
            //打开链接  
            xhr.open("post","http://webservice.webxml.com.cn/WebServices/MobileCodeWS.asmx",true);  
            //设置content-type  
            xhr.setRequestHeader("content-type","text/xml;charset=utf-8");  
      
            //设置回调函数  
            xhr.onreadystatechange=function(){  
                //判断客户端发送成功&&服务端响应成功  
                if(4 == xhr.readyState && 200 == xhr.status){  
                    alert(xhr.responseText);  
                }  
            }  
      
            //组织SOAP协议数据  
            var soapXML = "<?xml version=\"1.0\" encoding=\"utf-8\"?>"  
            +"<soap:Envelope xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\">"  
                +"<soap:Body>"  
                +"<getMobileCodeInfo xmlns=\"http://WebXml.com.cn/\">"  
                    +"<mobileCode>"+document.getElementById("phoneNum").value+"</mobileCode>"  
                  +"<userID></userID>"  
                +"</getMobileCodeInfo>"  
             +" </soap:Body>"  
            +"</soap:Envelope>";  
            alert(soapXML);  
      
            //发送请求  
            xhr.send(soapXML);  
        }  
      </script>  
     </head>  
     <body>  
        手机号归属地查询:<input type="text" id="phoneNum" /><input type="button" value="查询" onclick="javascript:queryMobile();"/>  
     </body>  
    </html>

    展开全文
  • } } catch (Exception e) { log.error("调用远程WebService接口异常:{}" , e); throw e; }finally { IOUtils.closeQuietly(closeableHttpClient); } return result; } /** * xml转换为JSONObject * @Author nicky ...
  • 实现方案 小伙伴们怎么去实现是不是有点思路,在这个过程中,我们需要做几个事情 1、定义一个注解@ResponseResult,表示这个接口返回的值需要包装一下 2、拦截请求,判断此请求是否需要被@ResponseResult注解 3、...
  • webservice 接口报文拦截修改 由于客户方接口平台提供的报文不能满足我方服务的要求,需要对客户端传入的报文进行拦截,修改,然后才能满足服务端运行的需要 代码记录: import org.apache.cxf.helpers.IOUtils; ...
  • webservice接口使用json参数

    千次阅读 2021-11-25 18:08:31
    接到一个对接json格式参数的webservice接口的任务,很久没做过webservice相关并且以前也只做过xml格式参数,所以对此做了一些了解。 1、定义一个webservice服务端接口 1.1创建一个springboot项目(略) 1.2添加cxf依赖...
  • java调用webservice接口

    2021-12-24 10:42:06
    调用webService有很多方法,这里用直接SOAP调用远程的webservice。 这里展示的是http的调用方法,https需要跳过验证,下面我会把跳过验证的方法附上,当然入参可以用StringBuffer拼接XML的方式来写 //url地址 String...
  • 需求:用java方法调用客户的.net的webservice接口方法。问题:网上找了一个java调用.net的ws服务接口的方法,然后调用网上的天气预报web服务,但是输入参数报错----服务器无法处理请求。 —> 值不能为空。实际就...
  • 实例如下所示: mui.init();... 注意:如果返回的格式有问题会提示:abort 以上这篇MUi框架ajax请求WebService接口实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。
  • 我的第一次WebService接口开发教程

    千次阅读 2021-08-07 19:24:47
    工作中,接触到很多系统要互相对接,因为大多数公司(项目)所用的平台不同,要想一方提供数据信息供对方提取,首先想到的就是开放出一个WebService接口调用文档和WebService地址,这样对方就能根据文档地址编程去...
  • springboot调用WebService接口方法

    千次阅读 2021-07-29 16:50:08
    最近在项目中涉及到和其他部门(Sap)对接数据,因为该部门所用语言不是java,而WebService具有跨语言的特性,最后决定使用WebService来完成对接,下面上干货。 通过wsdl文件生成java代码 1、在项目中创建一个新的...
  • 先说明一下当时情况,厂家发布了一个webservice服务,我生成客户端,然后服务已经拿到,但是调用方法是出现如上错误 一开始百度搜了许久,收到的答案较为复杂,而且不是满意,后面仔细查看了一下对方的服务,看出了...
  • webservice接口地址:需要注意的是接口地址返回的是一个xml文件。既可以用来承载数据,也可以直接作为文档。 想要直观查看接口文档,可以去掉"?wsdl",就可以直观看到有哪些接口。以及参数信息 url = ...
  • WebService接口的生成和调用(WebService接口

    万次阅读 多人点赞 2019-03-01 13:26:23
    一:WebService的服务端发布 1:发布web程序服务端发布 2:本地发布 二:Webservice客户端调用: 1:本地生成代码,直接调用: 2、利用dos命令生成代码,和第一种基本一致 3:利用apache的AXIS直接调用远程...
  • soapui请求webservice接口,响应信息没有内容,日志提示“ Premature end of file” 请求内容如下 请求后,返回的响应信息中没有内容 后台日志提示“ Premature end of file” 解决方法 修改之后就收到返回的数据...
  • WebService接口客户端调用 接口url: http://ip:port/…?wsdl 将该地址输入到浏览器会返回xml文件显示在浏览器上 鼠标右键另存为wsdl文本。 下载红色框中的,我这里下载的apache axis2 打开idea:file->setting-&...
  • 在调用第三方提供的webservice接口时我们可以设置超时时间: HTTPClientPolicy client = new HTTPClientPolicy(); client.setReceiveTimeout(1000 * 10); // 该时间为响应超时。 client.setConnectionTimeout(1000 *...
  • Android 访问https 的webservice 接口
  • 以Http方式调用WebService接口

    千次阅读 2021-09-27 11:57:47
    以Http方式调用WebService接口 场景:公司需要第三方流水的数据,三方系统接口对外的形式是webservice的接口,而公司的系统没有webservice模块,以http调用接口非常的方便实用。
  • Java对接WebService接口

    2021-08-27 16:42:48
    1.WebService接口示例 POST /WebService.asmx HTTP/1.1 Host: tmscn-dev.carlsberg.asia Content-Type: text/xml; charset=utf-8 Content-Length: length SOAPAction: "http://tempuri.org/GetQrCode" <?xml ...
  • 调用webservice 接口一般有以下几种方法: 一。 使用gsoap 工具生成客户端代理调用代码。 其中会用到 wdsl2h 和 soapcpp2 工具, 此种办法在c++ 工程中常见。 二。 使用python 提供的suds 库调用接口。 from suds....
  • WebService接口的几种调用方式--wsdl文件类型
  • 说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。 异常详细信息: System.InvalidOperationException: 因 URL 意外地以“/...
  • Python访问WebService接口

    2020-12-08 19:52:02
    1.使用Python访问WebService远程方法from suds.client import Clientfrom suds.transport.https import HttpAuthenticatedt = HttpAuthenticated(username=’admin’,password=’123′)test = Client(...
  • 网上大多数回答是:由于调用webservice接口方法时,传的数据是NUll值。将NUll值改为空字符串(既:“”)就没问题了。但是我的参数确实不为null,为什么还是报这个错呢? 求教各位大佬。 ...
  • webservice接口与restful接口

    千次阅读 2019-09-26 09:45:34
    webservice接口与restful接口的区别: ...java调用webservice时抛出该异常:Fault occurred while processing:看了网上一堆解答,我的请求参数没问题,eclipse有报错,看报错信息就可以找到问题了。 2...
  • C# 访问WebService接口示例

    千次阅读 2020-09-17 17:19:24
    工作时遇到需要请求客户的接口返回数据,要求使用WebService,借此机会记录一下。 一、什么是WebService? 简单来说: WebService即web服务,是一种跨编程语言、跨操作系统平台的远程调用技术。 跨编程语言:比如...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 13,648
精华内容 5,459
关键字:

webservice接口请求异常