因为一个的webapi需要传输token,另外一个系统不能配置,只能直接调webservice,所以需要重写一个webserice将获取token的过程封装进去,真是不想写,头发已经不多了啊!
1.下载eclipse
http://www.eclipse.org/downloads/
2.下载jdk
http://www.oracle.com/technetwork/java/javase/downloads/index.html
加压缩到c:\java
3.设置java环境变量
path中增加安装目录 C:\java\bin
ClassPath 设置为C:\java\lib
照别人的配置方法描述里面,那些文档都比较老,其实这两个文件(dt.jar,tools.jar)从jdk9已经被移除了,搞的我一阵子好找。
4.测试jdk是否安装配置成功
C:\Users\samson>java -version
java version "15.0.2" 2021-01-19
Java(TM) SE Runtime Environment (build 15.0.2+7-27)
Java HotSpot(TM) 64-Bit Server VM (build 15.0.2+7-27, mixed mode, sharing)
5.安装eclipse后创建eclpse web项目test,新建jsp(选择模板encode为utf-8)进行网页测试
6.创建java 类 Encrytool.java ,加密用的,包就用了默认包,没有新建
7.创建java类 CallAPI.java,调用对端的webapi,包就用了默认包,没有新建
8.再创建一个jsp 页面用于测试 test.jsp
<%@ page import="Encrytool" %>
<%@ page import="CallAPI" %>
9.就那么几步,新的开发环境就遇到似乎无穷无尽的错误要去排除。
问题一:在CallAPI中要用到json ,但是import net.sf.json.JSONObject; 提示错误缺少包
找到包括Json JSONObject所必需的6个jar包,有好人打包好了,直接下载
commons-beanutils-1.7.0.jar
commons-collections-3.1.jar
commons-lang-2.5.jar
commons-logging.jar
ezmorph-1.0.3.jar
json-lib-2.1-jdk15.jar
打开eclipse所关联的tomcat文件夹,将所需要的jar包复制到lib文件夹里面
在bulid path的地方将tomcat添加在Classpath下(不要添加在Modulepath下)
重启项目,OK。
问题二:调试运行test.jsp的时候遇到:No JSP support. Check that JSP jars are in lib/jsp and that the JSP option has been specified to start.jar
原来用eplise自己带的 J2ee Preview runtime不行,需要用tomcat才可以,下载了tomcat10(https://tomcat.apache.org/download-10.cgi) ,解压缩,然后进行设置。
打开eclipse–>Window–>Preferences-->server-runtime 指定appach tomcat10目录
测试运行的时候选Tomcat 10就可以了。
问题三:page import="CallAPI" ,结果在jsp 导入时总是提示错误。
原因就是自己偷懒,将class直接建再src(默认包)下面。
<%@ page import="CallAPI" %> 这样不行,默认包是不可以的,必须建一个package
在src下面创建一个package:test,把class定义在这个包里面,然后就可以了。
<%@ page import="test.CallAPI" %> OK!
问题四:无法读取配置文件内容
许多配置参数想写在一个配置文件里面,于是在src下的自定义包里面创建了一个文件夹configure,将db.property文件放在这个目录,程序中使用getResourceAsStream("configure\\db.properties")去获取;但是调试的时候一直错误,原因找不到这个文件,可是我在可能的目录下都放了一个db.property文件,还是找不到。
最后想到一个办法,写一段代码,看到底是再哪个文件夹
File f= new File(CallAPI.class.getResource("/").getFile());
out.print(f.getPath());
结果输入目录是:
c:\javaproject\test\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\test\WEB-INF\classes\configure
原来在eclipse里面调试时候,实际目录再这里啊!在这个里面放了一个db.property,可以运行了,奇怪为什么调试的时候这个配置文件没有被拷贝过去!!其他class文件都拷贝过去了。
问题五:JSONObject 的操作方法
就是找不到方法,原来net.sf.json.JSONObject 和org.json.JSONObject 是不同的包,所以JSONobject的操作方法是不同的;
问题六:提示错误:java.security.InvalidKeyException: Wrong key size
到了这一步也算是正常了,原来是自己测试用的的私钥设置太短,只是111111,长一点就可以了。
问题七.生成webservice遇到错误
--The superclass "javax.servlet.http.HttpServlet" was not found on the Java Build Path
--IWAB0489E Error when deploying Web service to Axis runtime
axis-admin failed with {http://xml.apache.org/axis/}HTTP (404)404
IWAB0014E Unexpected exception occurred.
Cannot invoke "org.eclipse.jst.ws.internal.consumption.ui.wsrt.ServiceRuntimeDescriptor.getServiceImplementationType()" because "serviceRuntimeDescriptor" is null
找了很多很多文章都是再build path中配置一下,鸟用没有!!!最后找到了原因,我用的tomcat是10.0版本,换成7.0,9.0都可以。
而且把tomcat降成9.0以后,其他生成webservice遇到的问题都迎刃而解。
问题八.生成webservice的时候选择 web service runtime为 apache Axis(Deprecated)可以成功,但是Axis2就不可以。
Apache Axis特意写了deprecated,意思这个过期了是极不赞成。
https://mirrors.bfsu.edu.cn/apache/axis/axis2/java/core/1.7.9/
axis2-1.7.9-war.zip
axis2-1.7.9-bin.zip
解压到axis2-1.7.9-war.zip,将里面的axis2.war拷贝到tomcat的webapps目录下axis2
解压axis2-1.7.9-bin.zip 到一个目录,这个目录后面需要在eclipse中使用,因为这个里面有一些要用的jar包。在eclipse中的preferences-->java--bulid path-->user libararies中指定axis2 lib目录。
http://axis.apache.org/axis2/java/core/download.cgi
下载axis2-eclipse-service-plugin-1.7.9.zip
axis2-eclipse-codegen-plugin-1.7.9.zip
下载的eclipse插件解压到dropins文件目录下,一阵子折腾居然还不好使,既然不给面子,那就用Axis算了。
问题八:发布webservice
选中项目,导出到war包。将war包放到服务器tomcat的webapps文件夹下
相关的jar包放到 tomcat\lib目录下
启动tomcat。
--提示 org.apache.catalina.core.StandardServer.await 无法在地址[localhost]和端口8005
原因是那个服务器上原来已经部署了tomcat应用,8080和8005端口都已经被占用了,修改成8899,8015可以工作了。但还是抛出一个异常
java.lang.UnsupportedClassVersionError: test/CallAPI has been compiled by a more recent version of the Java Runtime (class file version 59.0), this version of the Java Runtime only recognizes class file versions up to 52.0 (无法载入的.类 [test.CallAPI])
服务器的jdk版本和我开发机器上不一致,更新搞定。
技术人员就这么耿,耿起来了也就忘记了头发。