WebService小白的使用记录


webservice客户端开发遇见的问题

本人第一次使用webService,只希望能帮助其他第一次使用的人,大神勿喷
我采用的是下面第二种方式,eclipse那种不知道应该怎么携带认证信息。
  1. 如何携带表头的认证信息
    如果出现如下报错,说明没有认证信息

    解决方式:添加如下代码
    org.apache.axis.message.SOAPHeaderElement soapHeader = 
    	new SOAPHeaderElement("http://tempuri.org/","CredentialSoapHeader");
    soapHeader.setNamespaceURI("http://tempuri.org/");
    soapHeader.addChildElement("UserId").setValue(userName);
    soapHeader.addChildElement("Password").setValue(passWord);
    call.addHeader(soapHeader);
    //需要注意的是参数CredentialSoapHeader UserId Password要和文档中给的对应。
    
  2. SimpleDeserializer encountered a child element, which is NOT expected, in something it was trying to deserialize.
    这个意思是解析xml遇到一个子节点处理不了
    所以我用文档接数据

    解决方式:添加如下代码
    call.setReturnType(XMLType.SOAP_DOCUMENT);
    Document ret = (Document)call.invoke("http://tempuri.org/", 
    	"GetLibraryByIds", new Object[]{isbn});
    //这里的参数是namespace 接口名 参数
    
  3. 客户端完成如何得到测试报文数据

    解决方式:添加如下代码
    finally {
    	//请求报文数据
    	Message requestMessage = call.getMessageContext().getRequestMessage();
    	//响应报文数据
    	Message responseMessage = call.getMessageContext().getResponseMessage();
    	if(null != requestMessage) {
    		String reqXml = requestMessage.getSOAPPartAsString();
    		System.out.println(reqXml);
    		System.out.println("==================>");
    	}
    	if(null != requestMessage) {
    		tring respXml = responseMessage.getSOAPPartAsString();
    		System.out.println(respXml);
    	}
    
  4. 如何将wsdl转化为本地代码
    一共有两种方式

    • 一种是eclipse的方式
    1. Eclipse中,file -> 选择 New –> Other…
    2. 选择web Service Client
    3. 输入WSDL路径,点击finish
    4. 本地方法调用就可以了
      =======================================================
    • 第二种采用wsdl2java工具生成webservice客户端代码
    1. 下载Apache-cxf发布包,地址:http://cxf.apache.org/download.html
    2. 解压
    3. 配置环境变量 CXF_HOME 你自己的地址(类似JAVA_HOME)
    4. Path中修改 %CXF_HOME%\bin
    5. 打开cmd 输入命令 wsdl2java –help 出现如下配置成功
    6. 输入命令 wsdl2java –encoding utf-8 –d 你要存储在项目的路径 wsdl路径
    7. 如果出现这个问题

      需要修改jdk文件,在这个目录下新建文件jaxp.properties

      添加

      再次执行cmd命令,没有报错,文件添加成功
  5. 附上我的maven坐标 和 导入的包

    有用没用的都在里面了
    
    	
    	  junit
    	  junit
    	  3.8.1
    	  test
    	
    
    	
    		javax.servlet
    		servlet-api
    		3.0-alpha-1
    		provided
    	
    
    	
    		org.apache.axis
    		axis
    		1.4
    	
    	
    		commons-discovery
    		commons-discovery
    		0.5
    	
    	
    		org.apache.axis
    		axis-jaxrpc
    		1.4
    	
    	
    		org.apache.axis
    		axis-saaj
    		1.4
    	
    	
    		org.apache.axis
    		axis-ant
    		1.4
    	
    	
    		javax.activation
    		activation
    		1.1.1
    	
    
    	
    		axis
    		axis-wsdl4j
    		1.5.1
    	
    	
    		javax.xml.soap
    		saaj-api
    		1.3.5
    	
    	
    		net.sourceforge.jexcelapi
    		jxl
    		2.6.12
    	
    	
    		opensymphony
    		sitemesh
    		2.4.2
    	
    	
    		javax.xml.rpc
    		javax.xml.rpc-api
    		1.1.1
    	
    	
    	
    		org.apache.cxf
    		cxf-rt-frontend-jaxws
    		2.7.13
    	
    	
    		org.apache.cxf
    		cxf-rt-transports-http
    		2.7.13
    	
    	
    		org.apache.cxf
    		cxf-rt-transports-http-jetty
    		2.7.13
    	
    	
    		org.apache.cxf
    		cxf-rt-frontend-jaxrs
    		2.7.13
    	
    	
    		org.apache.cxf
    		cxf-rt-wsdl
    		3.1.4
    	
    	
    		javax.xml.bind
    		jaxb-api
    		2.3.1
    	
    
      
    
    我的导包信息
    import java.net.MalformedURLException;
    import java.rmi.RemoteException;
    
    import javax.xml.namespace.QName;
    import javax.xml.rpc.ServiceException;
    import javax.xml.soap.SOAPException;
    
    import org.apache.axis.AxisFault;
    import org.apache.axis.Message;
    import org.apache.axis.client.Call;
    import org.apache.axis.client.Service;
    import org.apache.axis.encoding.XMLType;
    import org.apache.axis.message.SOAPHeaderElement;
    import org.w3c.dom.Document;
    

学习参考:
https://blog.csdn.net/woshisangsang/article/details/89637171
https://blog.csdn.net/qq_33207383/article/details/99305720?utm_medium=distribute.pc_relevant.none-task-blog-2
https://blog.csdn.net/smilejuan/article/details/82769782#comments