方法1:
因为目前的框架是struts,不像springMvc对接json友善度那么高,所以只得自己写一个可访问的接口
解析的内容是xml
/**
* 解析xml,自己的接口
*/
public String testApiXml() {
System.out.println("==================进入testApiXml()==================");
//localhost:8080/scms_sin/login/Login/testApi.jspx
String method = ServletActionContext.getRequest().getMethod();
System.out.println(method);
String ret = "";
String xtbh = request.getParameter("xtbh");
String jkxlh = request.getParameter("jkxlh");
String jkid = request.getParameter("jkid");
try {
StringBuffer info = new java.lang.StringBuffer();
InputStream in = request.getInputStream();
BufferedInputStream buf = new BufferedInputStream(in);
byte[] buffer = new byte[1024];
int iRead;
while ((iRead = buf.read(buffer)) != -1) {
info.append(new String(buffer, 0, iRead, "UTF-8"));
}
// 创建saxReader对象
SAXReader reader = new SAXReader();
// 通过read方法读取一个文件 转换成Document对象
System.out.println(info.toString());//如果是json,那info也会是json,而不是xml格式
Document document = DocumentHelper.parseText(info.toString());
//获取根节点元素对象
Element node = document.getRootElement();
System.out.println("根节点:" + node.getName()); // 拿到根节点的名称
//遍历所有的元素节点
Iterator iter = node.elementIterator("cxtj"); // 获取根节点下的子节点cxtj
String yhm = "";
String dlmm = "";
while (iter.hasNext()) {
Element cxtj = (Element) iter.next();
yhm = cxtj.elementTextTrim("yhm"); // 拿到cxtj节点下的子节点yhm值
dlmm = cxtj.elementTextTrim("dlmm"); // 拿到cxtj节点下的子节点yhm值
System.out.println("yhm:"+yhm+";dlmm:"+ dlmm);
}
/*//创建xml
Document doc = DocumentHelper.createDocument();
Element root = doc.addElement("root");
//生成root的一个接点
Element category = root.addElement("user");
//生产user的一个接点
Element id = category.addElement("id"); */
response.setContentType("text/xml;charset=utf-8");
PrintWriter out = null;
out = response.getWriter();
out.print(ret);
} catch (Exception e) {
e.printStackTrace();
}
//System.out.println(get);
return null;
}
访问接口:最简单的就是用postman了,不过需要post,并且Content-Type = text要po,如果是json,一般是application/json
/**
* 请求自己写的接口
*/
public void getLoginName(){
try {
DefaultHttpClient httpclient = new DefaultHttpClient();
HttpRequestBase httpRequest = null;
HttpPost httpPost = new HttpPost("http://localhost:8080/scms_sin/api/Api/testApiXml.jspx");
AbstractHttpEntity entity = null;
entity = new StringEntity("<root><cxtj><yhm>admin</yhm><dlmm>123456</dlmm></cxtj></root>");
entity.setContentType("application/json");
if (entity != null) {
entity.setContentEncoding("UTF-8");
}
httpPost.setEntity(entity);
httpPost.addHeader("charset", "UTF-8");
httpRequest = httpPost;
HttpResponse httpResponse = httpclient.execute(httpRequest);
Integer status=httpResponse.getStatusLine().getStatusCode();
if(status==200){
String resultStr = EntityUtils.toString(httpResponse.getEntity());
System.out.println(resultStr);
}
} catch (Exception e) {
e.printStackTrace();
}
方法2:通过wsdl生成接口
首先,我们需要在web.xml添加:
<!-- 配置axis webservice服务 -->
<servlet>
<servlet-name>AxisServlet</servlet-name>
<servlet-class>org.apache.axis.transport.http.AxisServlet</servlet-class>
<load-on-startup>3</load-on-startup>
</servlet>
<servlet>
<servlet-name>AdminServlet</servlet-name>
<servlet-class>org.apache.axis.transport.http.AdminServlet</servlet-class>
<load-on-startup>100</load-on-startup>
</servlet>
<servlet>
<servlet-name>SOAPMonitorService</servlet-name>
<servlet-class>org.apache.axis.monitor.SOAPMonitorService</servlet-class>
<init-param>
<param-name>SOAPMonitorPort</param-name>
<param-value>5001</param-value>
</init-param>
<load-on-startup>100</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>AxisServlet</servlet-name>
<url-pattern>/servlet/AxisServlet</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>AxisServlet</servlet-name>
<url-pattern>*.jws</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>AxisServlet</servlet-name>
<url-pattern>/services/*</url-pattern>
</servlet-mapping>
<!-- <servlet-mapping>
<servlet-name>AxisServlet</servlet-name>
<url-pattern>/wh0881/services/*</url-pattern>
</servlet-mapping> -->
<servlet-mapping>
<servlet-name>SOAPMonitorService</servlet-name>
<url-pattern>/SOAPMonitor</url-pattern>
</servlet-mapping>
<mime-mapping>
<extension>wsdl</extension>
<mime-type>text/xml</mime-type>
</mime-mapping>
<mime-mapping>
<extension>xsd</extension>
<mime-type>text/xml</mime-type>
</mime-mapping>
<!-- 配置axis webservice服务 结束-->
其次:如图添加一个配置文件
创建一个wsdd配置文件
<?xml version="1.0" encoding="UTF-8"?>
<deployment xmlns="http://xml.apache.org/axis/wsdd/"
xmlns:java="http://xml.apache.org/axis/wsdd/providers/java">
<globalConfiguration>
<parameter name="adminPassword" value="admin"/>
<parameter name="attachments.Directory" value="./attachments"/>
<parameter name="attachments.implementation"
value="org.apache.axis.attachments.AttachmentsImpl"/>
<parameter name="sendXsiTypes" value="true"/>
<parameter name="sendMultiRefs" value="true"/>
<parameter name="sendXMLDeclaration" value="true"/>
<parameter name="axis.sendMinimizedElements" value="true"/>
<requestFlow>
<handler type="java:org.apache.axis.handlers.JWSHandler">
<parameter name="scope" value="session"/>
</handler>
<handler type="java:org.apache.axis.handlers.JWSHandler">
<parameter name="scope" value="request"/>
<parameter name="extension" value=".jwr"/>
</handler>
</requestFlow>
</globalConfiguration>
<handler name="LocalResponder"
type="java:org.apache.axis.transport.local.LocalResponder"/>
<handler name="URLMapper"
type="java:org.apache.axis.handlers.http.URLMapper"/>
<handler name="Authenticate"
type="java:org.apache.axis.handlers.SimpleAuthenticationHandler"/>
<!-- 创建一个写接口的类,例如UserPermissionWebService,路径是org.my431.base.servlet.UserPermissionWebService -->
<service name="UserPermissionWebService" provider="java:RPC">
<parameter name="className" value="org.my431.base.servlet.UserPermissionWebService"/>
</service>
<transport name="http">
<requestFlow>
<handler type="URLMapper"/>
<handler type="java:org.apache.axis.handlers.http.HTTPAuthHandler"/>
</requestFlow>
</transport>
<transport name="local">
<responseFlow>
<handler type="LocalResponder"/>
</responseFlow>
</transport>
</deployment>
在UserPermissionWebService就可以书写相关的接口:
public class UserPermissionWebService {
public String testApi(String aa) {
System.out.println("===============");
return aa;
}
}
接下来我们启动服务,输入网址:http://localhost:8080/scms_sin/services/UserPermissionWebService?wsdl
会看到相关的配置
有我们刚刚创建的testApi
接下来写一个请求接口的方法:(使用axis方式请求,需要的jar:https://download.csdn.net/download/pengbin790000/10389256)
/**
* 测试接口checkUser
* @return
*/
public void teatApi(){
String result = "";
try {
String endpoint = "http://localhost:8080/scms_sin/services/UserPermissionWebService";
Service service = new Service();
Call call = (Call) service.createCall();
call.setTargetEndpointAddress(endpoint);
call.setOperationName("testApi");//设置调用方法名
call.addParameter("aa", org.apache.axis.encoding.XMLType.XSD_STRING,javax.xml.rpc.ParameterMode.IN);//接口的参数
call.setReturnType(org.apache.axis.encoding.XMLType.XSD_STRING);//设置返回类型
String aa= "aa";
result = (String)call.invoke(new Object[]{aa});
System.out.println(result);
}catch (Exception e) {
e.printStackTrace();
}
}
方法三:
springMvc中,是默认和json绑定的,因此可以直接对一个controller进行访问请求
需要的wsdl的jar包:https://download.csdn.net/download/pengbin790000/10387803