◎筱米加步枪◎.Blog

Happy coding

XFire客户端调用Tuscany发布的WebService服务端接收不到参数解决方法

为了验证不同实现的客户端调用WebService都能成功,证明WebService平台无关性,

场景如下:

服务端WebService由Tuscany进行发布,客户端用XFire(插件生成XFire客户端代码)进行调用。

结果:

服务端接收不到参数,接收的参数为null,但是XFire客户端却能够接收到服务端返回的参数。

解决方法:

在XFire生成的接口中指定名字空间。

1.接收上指定@WebService指定名字空间targetNamespace="http://com.xxx.web.client.gen/"

2.在接口参数上@WebParam指定名字空间targetNamespace="http://com.xxx.web.client.gen/"

注:com.xxx.web.client.gen为此接口类所在的包名。

Maven工程上Absent Code attribute in method that is not native or abstract in class file解决方案。

在Maven工程上进行JUnit测试出现如下错误:

Caused by: java.lang.ClassFormatError: Absent Code attribute in method that is not native or abstract in class file javax/persistence/CascadeType

 

解决方案:
在pom.xml文件中添加jboss-javaee6依赖

<dependency>
   <groupId>org.jboss.spec</groupId>
   <artifactId>jboss-javaee-6.0</artifactId>
   <version>2.0.0.Final</version>
   <type>pom</type>
   <scope>provided</scope>
</dependency>

 

JapserReport导出PDF出现Could not load the following font错误的解决方案

年后,将年前的基于JasperReport封装的API移植到Maven工程上,问题不断,其中一个问题就是导出PDF过程中出现如下错误:

 

Could not load the following font :

   pdfFontName   : STSong-Light

   pdfEncoding   : UniGB-UCS2-H

   isPdfEmbedded : true

 

百度了好久没有找到答案,偶然想起之前也有解决相关iText的中文版本问题,请看这篇文章:http://cst.is-programmer.com/posts/18844.html

不过这次有点不同的就是,JasperReport4.5.0 使用的是iText2.1.7版本,分析包名是以com.lowagie开头,所以相应的iTextAsian也应该是com.lowagie.XXX的。

之前出现错误就是导出了其他版本的iTextAsian.jar(com.itextpdf.XXX)。

总之:iText和iTextAsian的包要配套起来就没问题了。

JasperReport导出PDF报表中文不显示问题

这两天,利用iReport和JasperReport做报表,发现在导出PDF的时候中文不显示,而导出HTML却显示正常,而相关的itext包也引入到项目中了。百度发现,在报表定义的时候要设置如下属性:

    Font name:          宋体 (中文字体)
    PDF font name:  STSong-Light
    PDF Encoding:    UniGB-UCS2-H(Chinese Siplified)
    PDF Embeded:   true

如图:

设置后,问题解决。

Hibernate出现No data type for node: org.hibernate.hql.ast.tree.IdentNode可能原因之一

某日,单元测试逻辑,出现如下错误:

java.lang.IllegalStateException: No data type for node:org.hibernate.hql.ast.tree.IdentNode
 \-[IDENT] IdentNode: 'wfProcessInstance'

找了大半天原因:

原理HQL中用了一个全角空格,该死的肉眼看不出来。因此笔记下..

 

另外,如何在MyEclipse中检测全角空格,方法如下:

在MyEclipse中选中如下功能:

检测代码中是否如下一个“句号”的字符串,,如果出现"句号",说明这是一个全角空格。

Oracle中char类型字段在Hibernate中SQL查询只返回一个字符 解决方法

场景如下:

使用char(2)的类型来标识某个类型,比如01,02,03...

结果使用Hibernate的SQL查询该字段只返回0,0,0...

跟踪发现,char类型映射出Java对象是Character,说明char在Java中只有两个字节(一个字符),因此只返回0

解决方法:

通过限定他的返回类型为String就行了,如下:

SQLQuery query = session.createSQLQuery(sql);

query.addScalar("列名",Hibernate.STRING);

即可解决.不过会导致对所查询的字段都要加上addScalar.

WebService报No operation found in the portType element错误

启动Jboss,报如下错误:

java.lang.RuntimeException: org.apache.axis2.AxisFault: No operation found in the portType element

只是增加了一个WebService的外壳(无方法),结果报如上错误,

看来WebService不允许部署无方法的接口。

解决方案:在接口中补上一个方法咯。如果该接口无用,可删除接口

Panteho报表设计器输出PDF的中文不显示解决

在Penteho报表设计器中,拖动一个Label,然后根据API输出PDF文件,结果PDF文件中只显示英文部分,中文部分不显示。

研究许久,原来还要更改Label的属性。具体解决方案:

1.指定【style】的【encoding】为utf-8

2.还要修改【style】的【family】为“宋体”或者其他可识别字体。

如图:

JBPM4.3出现Session closed错误解决方法

项目组临近发布版本了,但由于运行过程中出现“Session closed”的错误,发布延迟了两天。

问题已经解决了,虽然不是我解决的,还是记录备忘下:

解决方法:

在EnvironmentFactory对象执行openEnvironment()后获取EnvironmentImpl对象,在操作完最后EnvironmentImpl需要close掉(通常放在finally块中执行)。

代码模版:

		EnvironmentFactory environmentFactory = (EnvironmentFactory)processEngine;
		EnvironmentImpl env = null;
		try {
			env = environmentFactory.openEnvironment();
			//...执行其他相关操作
		} catch (Exception ex) {
			ex.printStackTrace();
		} finally {
			//EnvironmentImpl需要close掉
			if (env != null)
			    env.close();
		}

 

解析XML文件报错:Invalid byte 2 of 2-byte UTF-8 sequence解决方案

使用Dom4j对XML文件进行操作,出现如下异常:

java.io.UTFDataFormatException: Invalid byte 2 of 2-byte UTF-8 sequence.

百度得之,是Xml文件的编码问题,解决方案如下:

把Xml文件用记事本打开, 然后【另存为】的时候选择 "编码 "为UTF-8保存,再进行读写操作即可。