WebService案例实例
前言:
由于工作需要,写一个接口,返回xml信息。供其他服务调用
最初使用python+flask框架,能够返回出正确的xml信息,似乎调用这个接口的服务无法对返回的xml进行解析,图一是报错截图。(开发说是协议问题)如果有知道的小伙伴可以给我留言!
Caused by: org.xml.sax.SAXException: Bad envelope tag: envelope 错误问题
转战使用Java语言开发
笔者之前未使用过Java,也是通过网上查找一些相关材料,最后写出这个简单的案例
准备工具:
1.下载 jdk,我用的1.8.0
2.安装 Java编译器,我用的Intellij IDEA 专业版
下面是正文
1.首先创建一个web项目来用做服务端,创建项目Java-WebServices。如果是社区版可能没有这个选项
项目中一共3个.java文件 接口与类一目了然 Login4AServices是一个发布类只有一个main方法
2.直接上代码:
Login4AServicesInterface.java
package com.webservice.server;
public interface Login4AServicesInterface {
}
Webcontextlistener.java
package com.web;
import com.webservice.server.Login4AServices;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import javax.xml.ws.Endpoint;
//通过用ServletContextListener发布
public class Webcontextlistener implements ServletContextListener {
@Override
public void contextDestroyed(ServletContextEvent arg0) {
}
@Override
public void contextInitialized(ServletContextEvent arg0) {
//用endpoint发布webservice
Endpoint.publish("http://127.0.0.1:8146/uac/services/CheckAiuapTokenSoap", new Login4AServices());
System.out.println("通过servletcontextlistener部署webservice成功");
}
}
Login4AServices.java
package com.webservice.server;
import javax.jws.WebMethod;
import javax.jws.WebService;
import javax.xml.ws.Endpoint;
@WebService(targetNamespace = "http://127.0.0.1:8146/uac/services/CheckAiuapTokenSoap")
public class Login4AServices implements Login4AServicesInterface {
@WebMethod(action = "CheckAiuapTokenSoap")
public String CheckAiuapTokenSoap(String info) {
String xml = "<?xml version='1.0' encoding='UTF-8'?><USERRSP><HEAD><CODE>000</CODE><SID>000</SID><TIMESTAMP>20201221082621</TIMESTAMP><SERVICEID>CQYGPT</SERVICEID></HEAD><BODY><RSP>0</RSP><APPACCTID>aaa</APPACCTID><MAINACCTID>10007308</MAINACCTID></BODY></USERRSP>";
System.out.println("from client..." + " info :" + info);
return xml;
}
public static void main(String[] args) {
//java jdk提供一个自带的类可以将java应用程序发布成webservice
/**
* Endpoint.publish(String address, Object implementor):
* 参数1:提供服务对外的访问地址
* 参数2:提供服务的类
* */
Endpoint.publish("http://127.0.0.1:8146/uac/services/CheckAiuapTokenSoap", new Login4AServices());
System.out.println(" 发布成功 ...");
}
}
4.执行Login4AServices.java文件就是发布
发布的时候需要确保端口号没有被占用
附上查看端口是否被占用命令:netstat -ano | findstr "port"
5.测试一下
我们使用上面的URL地址访问下
http://localhost:8146/uac/services/CheckAiuapTokenSoap?wsdl (一定要加上?wsdl)
用Java写的webservice接口就解决了前言中的工作问题,使用flask框架的却不行。。。。
依葫芦画瓢… 先记录下来,再作补充。
附上另外一篇项目实例,用python+flask框架
flask-web项目实例(二),设置响应消息为xml格式