最进研究webservice 之前谢了一个发布webservice的文章 现在补一篇调用外部webservice的文章。。。gogogo!!!
首先我是开启一个web环境搭建一个web项目该有的框架(初学一切从简)
接下来导入meven依赖(贴主要的)
<dependency> <groupId>org.apache.axis</groupId> <artifactId>axis</artifactId> <version>1.4</version> </dependency> <dependency> <groupId>javax.xml</groupId> <artifactId>jaxrpc-api</artifactId> <version>1.1</version> </dependency>
中途会报java.lang.ClassNotFoundException: org.apache.commons.discovery.tools.DiscoverSingleton错误导入commons-discovery-0.2.jar
(找不到相应的meven依赖 所以我去apache的官网下载了一个commons-discovery-0.2.jar包 并且在WEB-INFO下创建了一个lib目录 然后放入并且导入)
再然后,创建一个类调用即可
import org.apache.axis.client.Call;
import org.apache.axis.client.Service;
import org.apache.axis.encoding.XMLType;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.xml.namespace.QName;
import javax.xml.rpc.ParameterMode;
@Controller
public class WebServiceTest
{
@RequestMapping(value = "/test",method = RequestMethod.GET)
@ResponseBody
public String doSelectRiskReportForm(HttpServletRequest request,
HttpServletResponse response){
//调用接口
//方法一:直接AXIS调用远程的web service
String result=null;
try {
String endpoint = "http://localhost:8080/service/RemoteService?wsdl";
Service service = new Service();
Call call = (Call) service.createCall();
call.setTargetEndpointAddress(endpoint);
String parametersName = "str"; // 参数名//对应的是 public String printWord(@WebParam(name = "settle_num") String settle_num);
//call.setOperationName("printWord"); // 调用的方法名//当这种调用不到的时候,可以使用下面的,加入命名空间名
// namespaceURI:命名空间--即WebService接口的targetNamespace属性
// localPart:调用的方法名
call.setOperationName(new QName("urm:first", "getString"));
call.addParameter(parametersName, XMLType.XSD_STRING, ParameterMode.IN);//参数名//XSD_STRING:String类型//.IN入参
call.setReturnType(XMLType.XSD_STRING); // 返回值类型:String
String message = "zpf:";
//将夹带的信息方到Object中进行加载
result = (String) call.invoke(new Object[] {message});// 远程调用message
} catch (Exception e) {
System.err.println(e.toString());
}
System.out.println(result);
return result;
}
}
测试结果:zpf:XXXXXXXXXXXXXXX
我的测试接口就一个String类型的输入参数 所以就比较简单。
到这里如果没有什么问题 差不多就结束了。
当然还要其他的方式调用接口 我这里用的是axis技术 用wsdl报文测试也可以而且不用写代码!!!
今天的分享就这么多。