- xml - AJAX/Jquery XML 解析
- 具有多重继承的 XML 模式
- .net - 枚举序列化 Json 与 XML
- XML 简单类型、简单内容、复杂类型、复杂内容
Java API 保证它永远不会返回 null - 但对我来说,它是!
相关代码:
xml = new StreamSource(new URL(mondialURL).openStream());
xsl = new StreamSource(new File("/REMOVED/countriesnofilter.xsl"));
result = new StreamResult(new PrintWriter(out));
transformer = TransformerFactory.newInstance().newTransformer(xsl);
transformer.transform(xml, result);
由于 xml、xsl 和结果是使用 new 生成的,因此它们 - 必须 - 不包含 null,因此它必须是变空的转换器。为什么会发生这种情况,我该如何解决?
抛出这个:
org.apache.jasper.JasperException:JSP 中的异常:/dca/ass2/a.jsp:46
43: result = new StreamResult(new PrintWriter(out));
44:
45: transformer = TransformerFactory.newInstance().newTransformer(xsl);
46: transformer.transform(xml, result);
47:
48: %>
49: <INPUT TYPE="SUBMIT" VALUE="Get one country">
Stacktrace:
org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:451)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:373)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:329)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:265)
javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
sun.reflect.GeneratedMethodAccessor50.invoke(Unknown Source)
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
java.lang.reflect.Method.invoke(Method.java:597)
org.apache.catalina.security.SecurityUtil$1.run(SecurityUtil.java:244)
java.security.AccessController.doPrivileged(Native Method)
javax.security.auth.Subject.doAsPrivileged(Subject.java:517)
org.apache.catalina.security.SecurityUtil.execute(SecurityUtil.java:276)
org.apache.catalina.security.SecurityUtil.doAsPrivilege(SecurityUtil.java:162)
root cause
java.lang.NullPointerException
org.apache.jsp.dca.ass2.a_jsp._jspService(a_jsp.java:104)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:98)
javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:331)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:329)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:265)
javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
sun.reflect.GeneratedMethodAccessor50.invoke(Unknown Source)
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
java.lang.reflect.Method.invoke(Method.java:597)
org.apache.catalina.security.SecurityUtil$1.run(SecurityUtil.java:244)
java.security.AccessController.doPrivileged(Native Method)
javax.security.auth.Subject.doAsPrivileged(Subject.java:517)
org.apache.catalina.security.SecurityUtil.execute(SecurityUtil.java:276)
org.apache.catalina.security.SecurityUtil.doAsPrivilege(SecurityUtil.java:162)
编辑:肯定是变压器以某种方式为空的情况。观看:
org.apache.jasper.JasperException:JSP 中的异常:/dca/ass2/a.jsp:49
46:
47: xml.getInputStream();
48: xsl.getInputStream();
49: transformer.reset();
50:
51: //transformer.transform(xml, result);
52:
又是一个空指针异常。如果是因为 xml 为空,那么它会在 47 处抛出 NPE。
EDIT2:如果我将 newTransformer(xsl) 更改为 newTransformer() 它会起作用,所以这是 newTransformer(xsl) 中的问题。
最佳答案
我遇到了同样的问题,当我的一些测试出错时,在向项目添加了新的依赖项之后。想知道当它的 API 说这是不可能的时候,它怎么会返回 null,我再次修改了它:
"Obtain a new instance of a TransformerFactory. This static method creates a new factory instance This method uses the following ordered lookup procedure to determine the TransformerFactory implementation class to load: Use the javax.xml.transform.TransformerFactory system property. ... [lookup order] ... Once an application has obtained a reference to a TransformerFactory it can use the factory to configure and obtain transformer instances."
所以,我也查看了 TransformerFactory API,它说:
"The system property that determines which Factory implementation to create is named "javax.xml.transform.TransformerFactory". This property names a concrete subclass of the TransformerFactory abstract class. If the property is not defined, a platform default is be used."
正如我提到的,当我向项目添加一个新的依赖项时,问题就开始了:另一个处理 XML 文档/签名的项目。我删除了依赖项,运行了测试(由于添加了依赖项而失败)并检索了 TransformerFactory 的特定类。我添加了依赖项并再次运行测试:现在它是一个不同的类。因此,正如我所料,查找过程正在实例化一个错误的 TransformerFactory 实现,在添加的 jar 中找到它。
我不想通过添加另一个系统属性来修复它,所以我这样更改了代码:
private static final String TRANSFORMER_FACTORY_CLASS = "com.sun.org.apache.xalan.internal.xsltc.trax.TransformerFactoryImpl";
TransformerFactory factory = TransformerFactory.newInstance(TRANSFORMER_FACTORY_CLASS, null);
//null for default ClassLoader
一切正常。
关于java - JSP - TransformerFactory.newInstance().newTransformer(xsl) 返回空值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4096295/
我正在尝试使用 XmlPullParser 解析 XML 文档,但出现以下错误 Gradle:错误:找不到符号类 newInstance 创建 XmlPullParserFactory XmlPull
在 Java 中,当存在拒绝访问检查抑制的 SecurityManager 时,Constructor 的 newInstance 方法起作用,而 Class 的 newInstance 抛出 Sec
最近我开始尝试一点反射(reflection)。我遇到了一个找不到任何答案的问题。我会尽力解释问题所在。 首先,我有一个从带有注释的反射中获得的方法。当我尝试调用这个方法时,我当然需要它所在类的一个实
我将从我的示例开始:我有一个类 classload.Loadable 。 package classload; public class Loadable { static{
你好 V8 程序员和 node-gyp'ers。我正在运行 OS X 10.12.6、Node v6.11.1 和 npm v3.10.10、nan v2.6.2,gcc 作为 XCode 的一部分,
我目前正在为自己编写一个私有(private) Java API,它使用 Class允许扩展 API 的特定部分(统计数据保存部分)而不改变底层用法。我喜欢这种方法,但由于某种原因,每当 API 尝试
这个问题已经有答案了: Akka. Android. NoSuchMethodException: (2 个回答) 已关闭 6 年前。 我觉得我错过了一些东西。我正在尝试做下一步: Class.fo
以下代码返回 null: private JComponent setupComponent(Class c, Object... constructor) { try {
我正在尝试了解如何使用 Api.camera2我正在关注此链接中的谷歌样本 https://github.com/googlesamples/android-Camera2Basic 当我打开项目时,
我有一个抽象 fragment 类(称为 A)和一个扩展它的 fragment 类(称为 B)。我目前在制作 B 类的对象时调用 newInstance,但我想知道我如何也可以为 A 类做类似的事情,
我正在从 bignerdranch 学习 android 开发,我正在尝试实现寻呼机适配器,但在 Android Studio 中出现无法解析 newInstance 方法的错误。我在每个类中使用支持
我一直在研究一种实例化方法,它允许我将各种相似的类打包到一个外部类中。然后我可以通过将该类型的名称传递给构造函数来实例化每个唯一的类类型。经过大量的研究和错误,这就是我想出的。我留下了一个错误,以证明
调用 newInstance() 是否有惩罚,或者它下面的机制是否相同?newInstance() 对 new 关键字* 有多少开销(如果有的话)? *:忽略 newInstance() 意味着使用反
这个问题在这里已经有了答案: Instantiate a class object with constructor that accepts a string parameter? (4 个回答)
我正在处理一个解析 xml 文件的项目,我在使用 SAXParserFactory 和 DocumentBuilderFactory 时遇到了问题。对于他们两个,当我尝试调用 newInstance(
我编写了在打印之前将文档转换为字符串的代码 TransformerFactory tf = TransformerFactory.newInstance(); Tran
我在进行重构时遇到了这种情况,所以我想知道它们之间是否存在任何差异? 例如: import java.util.List; import java.lang.reflect.Array; public
我通过 bean 脚本框架使用 rhino 在我的 java 进程中创建和配置对象。脚本中使用的一些类需要动态加载,因为它们并不总是位于标准类路径上。 为了加载这些类,我使用自定义类加载器初始化脚本框
我正在编写一个有两个 ArrayList 的类字段。一种是用于包含自定义对象。另一个用于包含自定义集合对象(也可能具有这些字段): private ArrayList myObjList;
我需要从一种类型转换为另一种类型。谷歌搜索但卡住了。假设我想将 initObject 转换为 Casted 类。 Object objInstance = initObject.getClass().
我是一名优秀的程序员,十分优秀!