做WebService有一段时间了,其实WebService还是挺简单的,一个简单的POJO就能发布成webservice.
写一下遇到的问题:
首先搭建传统的hibernate框架,遇到的jar包的问题,话说以前重来没遇见过,当然以前我没用过annotation~~
因为要用到的不同jar包里的同名类,如果不特定顺序就会出现调用错误情况~~以下是需要用到jar包的顺序:
然后遇到的问题是Timestamp这个问题~~
注意一定要引用正确的包,当时脑残的引用了oracle下面的timestamp类型,以至于不能正确的插入
要引用java.sql.Timestamp
写法如下
@Temporal(TemporalType.TIMESTAMP)
@Column(name="DATIME")
public Timestamp getDatime() {
return datime;
}
public void setDatime(Timestamp datime) {
this.datime = datime;
}
在单位发布webservice之后一切安好,但是回家用VPN连一下公司的网后,webservice说什么都不能调用了~~ 后来上网查了一下是因为域不同造成无法访问。然后顺藤摸瓜发现自动生成的service.xml有问题,在定义webservice时 没写scope的属性~~添上scope='Application',一切恢复正常~~~当然在公司也正常~~其实我也很奇怪,为什么服务端和客户端都在我本机上,却报这种错误~~
然后就是写SH1+BASE64压缩, 调用时而报错时而不报错~~
后来发现DigestUtils.sha1这个需要commons-codec需要1.8以上的jar包,可axis2中lib里有1.3的包,所以调用webservice 时,系统抽风一会儿调用1.8的jar包,一会儿调用1.3的包~~不过,我觉得正常的电脑应该首先调用1.3的包~~解决方案可以直接替换axis2 lib里的1.3的包~~~当时我的电脑比较奇怪,替换后我的log不能在notepad++里实时更新,所以我不敢动,后来貌似是电脑太慢了,我采用的解决方式是拿到source代码把包名org开头的直接替换com,然后打包引用~~~呵呵,这下肯定不会再调用错了~~喃自己的包~~~
有时候webservice页面不能实时更新,害得我发布了无数次,就是不成功,后来发现一切都是假象~~~早就成功了,浪费了一个小时啊~~~坑死我了~~~
用soapui 模拟客户端的访问时候,不大会写数组,自己搞了一上午,木有结果~~后来上网查查,越查越复杂啊,连wsdl文件都要改,后来喃的leader告诉我直接那个标签写N个就行,数组就是同名啊~~额~~xml不熟啊,话说java不是这么写的~~~后来忽然想起来,在我怀宝宝的时候,他就告诉过我那么写了~~撞墙撞墙~~~
最后就是遇到读取资源文件的问题,本来测试都好好的,一打包后就都读不出来了,后来查出来,打成jar包后应this.getClass().getResourceAsStream("/constant.properties");一定要用getResourceAsStream,话说我看log时候还不仔细,明明掉别的jar包里的同名资源文件,我都没看到,还纳闷怎么就得到资源文件中的一个变量呢~~哎,得有多脑残,为嘛就不看一眼啊~~好了写到这了,具体见我的博客文章~~~