接口文件:IBbossGroupInfoService.java
package com.asiainfo.b2p.soap.interfaces; import java.rmi.RemoteException; public interface IBbossGroupInfoService { // 根据集团编号查询集团基本信息 /** * 集团编号 GROUP_NUM 集团名称 GROUP_NAME 公司地址 CO_ADDR 集团状态 GROUP_STATE 集团开户时间 * START_TIME 传真 FAX 企业网址 WEB_URL 证件类型 CARD_TYPE 证件号码 CARD_CODE * 公司邮编CO_POSTCODE 联系电话 TEL_NUM 法人代表名称 PERSON_NAME 发展类型 DEVELOP_TYPE * 地区编码REGION_ID regionId * * @throws Exception */ public abstract String groupInfo(long groupNo) throws Exception, RemoteException; // 根据集团编号查询集团订购历史 public abstract String groupSubHistoryInfo(long groupNo) throws Exception; }实现类:IBbossGroupInfoServiceImpl.java
package com.asiainfo.b2p.soap.impl; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import com.asiainfo.b2p.soap.interfaces.IBbossGroupInfoService; /** * @Product esop_dev * @FileName IBbossGroupInfoServiceImpl.java * @History TODO 根据集团编号,查询集团基本信息、集团用户信息、集团订购历史 * @Version 1.0.0 * @Date Nov 22, 2011 * @Author pantaipeng * @Content 最初版本 */ public class IBbossGroupInfoServiceImpl implements IBbossGroupInfoService { private static transient Log log = LogFactory .getLog(IBbossGroupInfoServiceImpl.class); // 根据集团编号查询集团基本信息 public String groupInfo(long groupNo) throws Exception, RemoteException { log.info(">>>>>>>>>>>>>>>>>>>>>>>>>>>集团编号=" + groupNo); //方法体我省略了,为了测试我仅加入一句打印语句 System.out.println("我是一个公共的方法,作用是根据集团编号查询集团基本信息"); String xml="<message>public_groupInfo</message>";//为了测试,返回的信息我也是随便写的一个字符串 return xml; } // 根据集团编号查询集团订购历史 public String groupSubHistoryInfo(long groupNo) throws Exception { log.info(">>>>>>>>>>>>>>>>>>>>>>>>>>>集团编号=" + groupNo); //方法体我省略了,为了测试我仅加入一句打印语句 System.out.println("我是一个公共的方法,作用是根据集团编号查询集团订购历史"); String xml="<message>public_groupSubHistoryInfo</message>";//为了测试,返回的信息我也是随便写的一个字符串 return xml; } }说明:为了更加的接近实际的开发,这个是本机上运行的程序,实现的功能是通过一个编号查询相关信息拼成一个字符串,方法体的部分我删除了,你需要用这个代码的话,直接拷贝修改包名称就可以直接用了。
<service name="GroupInfoService" type="" provider="java:RPC"> <parameter name="className" value="com.asiainfo.b2p.soap.impl.IBbossGroupInfoServiceImpl" ></parameter> <parameter name="allowedMethods" value="*"/> </service>
<servlet> <servlet-name>AxisServlet</servlet-name> <display-name>Apache-Axis Servlet</display-name> <servlet-class>org.apache.axis.transport.http.AxisServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>AxisServlet</servlet-name> <url-pattern>/services/*</url-pattern> </servlet-mapping>指定处理类以及映射就好,如果像这样配置的话,后面再写webservice的话,这个文件就不用再配置了。
动态调用 package test.webserviceclient; import java.net.MalformedURLException; import java.net.URL; import java.rmi.RemoteException; import javax.xml.rpc.ParameterMode; import javax.xml.rpc.ServiceException; import org.apache.axis.client.Call; import org.apache.axis.encoding.XMLType; public class Test { /** * 通过genClient.bat文件生成的webservice客户端调用webservice服务的步骤如下: * 1.创建service对象 * 2.创建url对象 * 3.创建call对象, * 4.调用webservice的方法 */ public static void test1() { try { // 1.创建service对象,通过axis自带的类创建 org.apache.axis.client.Service service = new org.apache.axis.client.Service(); // 2.创建url对象 String wsdlUrl = "http://10.10.146.82:8080/esop_dev/services/GroupInfoService?wsdl";//请求服务的URL URL url = new URL(wsdlUrl);//通过URL类的构造方法传入wsdlUrl地址创建URL对象 // 2.创建服务方法的调用者对象call,设置call对象的属性 Call call = (Call) service.createCall(); call.setTargetEndpointAddress(url);//给call对象设置请求的URL属性 String serviceName = "groupInfo"; call.setOperationName(serviceName);//给call对象设置调用方法名属性 call.addParameter("groupNo", XMLType.XSD_LONG, ParameterMode.IN);// 给call对象设置方法的参数名、参数类型、参数模式 call.setReturnType(XMLType.SOAP_STRING);// 设置调用方法的返回值类型 //4.通过invoke方法调用webservice long groupNo = 2100000014L; String res = (String) call.invoke(new Object[] { groupNo });//调用服务方法 System.out.println(res); } catch (MalformedURLException e) { e.printStackTrace(); } catch (ServiceException e) { e.printStackTrace(); } catch (RemoteException e) { e.printStackTrace(); } } public static void main(String[] args) { test1(); } }代码中的注释很详细,我就不介绍了。
第三步:写测试类调用webservice
wsdl package test.webserviceclient; import java.net.MalformedURLException; import java.net.URL; import java.rmi.RemoteException; import javax.xml.rpc.ParameterMode; import javax.xml.rpc.ServiceException; import org.apache.axis.client.Call; import org.apache.axis.encoding.XMLType; public class Test { /** * 通过genClient.bat文件生成的webservice客户端调用webservice服务的步骤如下: * 先介绍创建的四个文件分别为: * IBbossGroupInfoServiceImpl 定义了web服务接口, * IBbossGroupInfoServiceImplService 定义了用户获取web服务接口的方法 * IBbossGroupInfoServiceImplServiceLocator 接口IBbossGroupInfoServiceImplService的具体实现 * GroupInfoServiceSoapBindingStub web服务客户端桩,通过该类与服务器交互,该类实现了IBbossGroupInfoServiceImpl接口 * 1.创建service对象 * 2.创建url对象 * 3.创建client对象 * 4.调用webservice的方法 */ public static void test1() { // 1.创建一个service对象 IBbossGroupInfoServiceImplService service = new IBbossGroupInfoServiceImplServiceLocator(); try { // 2.创建一个URL对象,传入wsdl的地址够过URL的构造方法创建 String wsdlUrl = "http://10.10.146.82:8080/esop_dev/services/GroupInfoService?wsdl"; URL url = new URL(wsdlUrl); // 3创建一个client对象 IBbossGroupInfoServiceImpl client = service .getGroupInfoService(url); // 4调用webservice的方法 long groupNo = 2100000014L; String res = client.groupInfo(groupNo); System.out.println(res); } catch (MalformedURLException e) { e.printStackTrace(); } catch (ServiceException e) { e.printStackTrace(); } catch (RemoteException e) { e.printStackTrace(); } } public static void main(String[] args) { test1(); } }