如何在Weblogic中校验及解释XML文件
来源:互联网 发布:centos 6.5 中文乱码 编辑:程序博客网 时间:2024/05/24 05:41
如何在Weblogic中校验及解释XML文件
前些天项目中要用到XML的校验及解释,于是本人写了一个校验器。在本地测试没有问题,但是到了Weblogic 中时,程序出了一点问题,后来找了一些资料才搞定。问题是JAXP方面的。
校验类如下(只有主要代码可能需要调试):
import org.apache.log4j.Logger;
import org.jdom.Document;
import org.jdom.input.SAXBuilder;
import org.jdom.output.XMLOutputter;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import java.io.*;
public class DefaultParser {
public static final String SCHEMA_LANGUAGE = "http://java.sun.com/xml/jaxp/properties/schemaLanguage";
public static final String XML_SCHEMA = "http://www.w3.org/2001/XMLSchema";
public static final String SCHEMA_SOURCE = "http://java.sun.com/xml/jaxp/properties/schemaSource";
private static Logger log = Logger.getLogger(DefaultParser.class);
public boolean validate(InputStream in, InputStream schema, ErrorHandle errorHandle)
throws Exception {
log.debug("DefaultParser.validate() begin:");
boolean result = false;
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
factory.setNamespaceAware(true);
factory.setValidating(true);
factory.setAttribute(SCHEMA_LANGUAGE, XML_SCHEMA);
factory.setAttribute(SCHEMA_SOURCE, schema);
DocumentBuilder parser = factory.newDocumentBuilder();
parser.setErrorHandler(errorHandle);
parser.parse(in);
if (errorHandle.getMsgList().size() == 0) {
result = true;
}
log.debug("DefaultParser.validate() result:" + result);
return result;
}
}
以上代码在IDE中调试没有任何问题,也能正确的校验出XML的错误,但程序发布到Weblogic中运行时,出现非法参数错误,主要是因为DocumentBuilderFactory使用了Weblogic自带的实现类。而在本地测试时使用的是xerces中的实现类(org.apache.xerces.jaxp.DocumentBuilderFactoryImpl)。看看DocumentBuilderFactory.newInstance()原代码可以看出默认的实现类应该是Sun的实现类(org.apache.crimson.jaxp.DocumentBuilderFactoryImpl)。所以实现类在不同的环境下是不同的,由于没有搞清楚,如何怎么配置或指定实现类,因此只好直接使用了测试环境下可以运行情况下的类。修改以上代码中的如下行:
DocumentBuilderFactory factory = new org.apache.xerces.jaxp.DocumentBuilderFactoryImpl();
修改后的校验方法如下:
public boolean validate(InputStream in, InputStream schema, ErrorHandle errorHandle)
throws Exception {
log.debug("DefaultParser.validate() begin:");
boolean result = false;
DocumentBuilderFactory factory = new org.apache.xerces.jaxp.DocumentBuilderFactoryImpl();
factory.setNamespaceAware(true);
factory.setValidating(true);
factory.setAttribute(SCHEMA_LANGUAGE, XML_SCHEMA);
factory.setAttribute(SCHEMA_SOURCE, schema);
DocumentBuilder parser = factory.newDocumentBuilder();
parser.setErrorHandler(errorHandle);
parser.parse(in);
if (errorHandle.getMsgList().size() == 0) {
result = true;
}
log.debug("DefaultParser.validate() result:" + result);
return result;
}
我知道有更好的解决方法,希望大家指正。谢谢
- 如何在Weblogic中校验及解释XML文件
- Structs2 输入校验,Action中校验,在xml中校验
- 如何在iOS中使用SM2进行数字签名及校验
- android中xml文件的作用及解释
- weblogic开发中weblogic.xml文件的配置
- weblogic开发中weblogic.xml文件的配置
- weblogic开发中weblogic.xml文件的配置
- weblogic中解析xml文件的问题
- 在ASP.NET中实现如何下载txt及xml文件的方法
- 在ASP.NET中实现如何下载txt及xml文件的方法
- 在VB6中校验XML文档
- 如何在web.xml中引用其它的xml文件
- 在web.xml中如何加载aplicationContext.xml文件
- 如何在MyEclipse中配置weblogic服务器
- 如何在weblogic服务器中发布项目
- TextView 在xml文件中的解释
- TextView 在xml文件中的解释
- 如何在XML文件中配置servlet的映射文件
- ascii编码(zhuan)
- First example In VS.NET 2005 Beta2(Script Callback)
- ascii编码(zhuan)
- Java 语言中的 return 语句
- 几个关于搜索引擎的开源项目资料的整理
- 如何在Weblogic中校验及解释XML文件
- MIDP2.0仕样探索之五
- Excel数据导入到DataSet类
- 计划(2005.10)
- 日志(2005.10)
- 变态MSN名字大集合(笑死你)
- 定时同步服务器上的数据(转)
- 作息时间
- 新版《龟兔赛跑》对企业家的启示