使用 dom4j DOMDocument 来提供 validator.validate(DOMSource) 在 java 1.6 中失败(xsi:noNamespaceSchemaLocation 不允许出现在根元素中),在 1.5 中有效
我发现以下问题非常棘手(好吧,这是轻描淡写) - 任何见解将不胜感激。目前似乎最好的主意是放弃 dom4j 以支持 XOM(http://stackoverflow.com/questions/831865/what-java-xml-library-do-you-recommend-to-replace-dom4j)。
我一直在验证从 dom4j 'new DOMDocument()' 创建的内存 XML - 但这不适用于 Java 6。
以下对 dom4j (1.6.1) DOMDocument 派生的 DOMSource 的 validate(source) 调用适用于 Java 1.5.x,但在 Java 1.6.x 中失败:
public void validate() throws Exception {
SchemaFactory schemaFactory = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
schemaFactory.setErrorHandler(null);
Schema schemaXSD = schemaFactory.newSchema(new URL(getSchemaURLString()));
Validator validator = schemaXSD.newValidator();
DOMSource source = new DOMSource(getDocument());
validator.validate(source);
}
Run Code Online (Sandbox Code Playgroud)
getSchemaURLString() 也用于在根节点添加 xsi:noNamespaceSchemaLocation 属性,即: xsi:noNamespaceSchemaLocation="http://localhost:8080/integration/xsd/fqlResponseSchema-2.0.xsd"
异常如下:
Exception: org.xml.sax.SAXParseException: cvc-complex-type.3.2.2: Attribute 'xsi:noNamespaceSchemaLocation' …Run Code Online (Sandbox Code Playgroud) 我看到我的发行版中有com.sun.media.sound包含文件的包。但我在这里没有看到它的javadocs: http: //docs.oracle.com/javase/6/docs/api/rt.jarjdk1.6.0_25
这个包的作用是什么?它是什么的一部分?我可以通过 Google 找到一些 javadocs(例如这里http://www.docjar.com/docs/api/com/sun/media/sound/package-index.html),但是如何知道哪个对于 SE 是正确的6?为什么它没有记录在主 javadoc 中?
编辑
所以,我知道它们不是公共API,但是它们的用途是什么?为什么他们记录在 openjdk javadoc 中?他们在那里公开吗?
我喜欢工作与春天功能,例如@Component,@Autowired或者ApplicationContext甚至在更小的应用程序(如批量应用).
我已经读过Java EE 6现在是企业应用程序中Spring的可行替代方案.对于较小的那个也是如此吗?我上面提到的功能有哪些相应的替代方案?
我正在使用Java SE 7为windows和mac编写简单的游戏,但我必须切换到java 6才能在我的计算机上运行Minecraft等游戏.在我更新到Mac OS X 10.8.2 Build 12C60之前,这曾经工作得很好.在此更新之前,我曾经能够打开java首选项并检查java 6或java 7.但是现在我似乎无法找到java首选项.
我正在运行mac OS X 10.8.2(最新版本)
谢谢.
安装Java for OS X 2012-006更新后,用于配置小程序的 Java Preferences 应用程序以及对我来说更重要的是 Java Web Start 应用程序都消失了。关于此更新的技术说明说:
此更新还删除了 Java 首选项应用程序,不再需要配置小程序设置。
如果不再需要,什么取代了它,或者如何恢复相同的功能?我过去能够做的一件事是配置 Java 控制台出现的时间/方式。现在它再也没有出现过,而且显然我对此无能为力!
尽管我从未安装过 Java 7 JRE,但我已经按照本技术说明中的步骤重新启用了 Java 插件和 Web Start 功能。
我正在运行 OS X Mountain Lion 10.8.2。
当我在此方法return的try块中的两个值中都出现资源泄漏警告时,我在Eclipse中正常工作:
@Override
public boolean isValid(File file) throws IOException
{
BufferedReader reader = null;
try
{
reader = new BufferedReader(new FileReader(file));
String line;
while((line = reader.readLine()) != null)
{
line = line.trim();
if(line.isEmpty())
continue;
if(line.startsWith("#") == false)
return false;
if(line.startsWith("#MLProperties"))
return true;
}
}
finally
{
try{reader.close();}catch(Exception e){}
}
return false;
}
Run Code Online (Sandbox Code Playgroud)
我不明白它会导致资源泄漏的原因,因为我是reader在try作用域之外声明变量,在try块内添加资源,然后在另一个finally块中将其关闭以使用另一个try...catch忽略异常,而NullPointerExceptionif reader是null出于某种原因...
据我所知,finally块总是在离开try...catch结构体时执行,因此在try块内返回值仍将finally …
我正在开发一个Java应用程序,我需要使用一个名为的jar myBeans.jar.
这myBeans.jar包含许多使用jdk 1.7编译的类文件.我没有这些类文件的源代码.
我的整个应用程序使用的是jdk 1.6.我无法将其编译器更改为jdk 1.7.所以我希望我的jar与我的应用程序兼容.这就是为什么我希望用jdk 1.6编译jar的类.
现在我的问题是:有没有办法使用jdk 1.6编译类文件(而不是java文件)?
任何其他建议也欢迎.
有人建议我使用反编译器从类文件中获取源代码,然后使用jdk 1.6编译源代码.但是我最后会喜欢这个解决方案,因为有很多类文件.
我正在尝试生成类并在运行时加载它们.
我正在使用一个ClassLoader对象来加载类.因为我不想耗尽PermGen内存,所以我不时引用类加载器并创建一个新的加载要使用的新类.这似乎工作正常,我不会PermGen失去记忆.问题是,当我这样做时,一段时间后我得到以下错误:
java.lang.OutOfMemoryError: GC overhead limit exceeded
Run Code Online (Sandbox Code Playgroud)
所以我的问题是,什么时候我应该取消引用类加载器以避免错误?:
我应该在我的代码中监视PermGen用法,以便在取消使用接近限制System.gc()时取消引用类加载器并调用PermGen吗?
或者我应该采用不同的方法?
谢谢
我得到了使用dateTimeFormat函数的代码.原始开发人员使用了"MM-HH-YY-dd-NN"的面具.这段代码适用于他的机器.它适用于我们的测试服务器.但它在我的本地机器上不起作用.当我将面具改为"MM-HH-yy-dd-NN"时,我才能使它工作;
注意这里的差异是大写的"YY"和小写的"yy"
在查看https://wikidocs.adobe.com/wiki/display/coldfusionen/DateTimeFormat上的文档时,看起来小写yy是官方支持的处理方式.
有谁知道为什么YY会在某些情况下得到支持而不是其他情况?我怀疑它可能是某些本地化代码,但我发现我的CF管理员和测试服务器上没有任何差异.我能在机器上做些什么让YY工作吗?
我的机器是在Mac上运行的Windows 7 VM,而服务器是Windows服务器2008.
我的JVM是1.6.0_29,而服务器运行1.7.0
这些差异是否足以解释这个问题?
这是一些简单的测试代码:
<cfscript>
testTime=now();
lowermask= "MM-HH-yy-dd-NN";
uppermask= "MM-HH-YY-dd-NN";
result = {
lower=dateTimeFormat(testTime, lowermask)
,upper=dateTimeFormat(testTime, uppermask)
};
writedump(result);
</cfscript>
Run Code Online (Sandbox Code Playgroud)
看起来问题出在底层Java版本中.我得到的错误是:
java.lang.IllegalArgumentException: Illegal pattern character 'Y'
at java.text.SimpleDateFormat.compile(SimpleDateFormat.java:768)
at java.text.SimpleDateFormat.initialize(SimpleDateFormat.java:575)
at java.text.SimpleDateFormat.<init>(SimpleDateFormat.java:500)
at coldfusion.util.DateUtils.getCFDateTimeFormat(DateUtils.java:673)
at coldfusion.util.DateUtils.formatDateTime(DateUtils.java:942)
at coldfusion.runtime.CFPage.LSDateTimeFormat(CFPage.java:1750)
at coldfusion.runtime.CFPage.LSDateTimeFormat(CFPage.java:1742)
at coldfusion.runtime.CFPage.DateTimeFormat(CFPage.java:1722)
at cftemp2ecfm333879290.runPage(C:\inetpub\wwwroot\temp.cfm:7)
at coldfusion.runtime.CfJspPage.invoke(CfJspPage.java:244)
at coldfusion.tagext.lang.IncludeTag.doStartTag(IncludeTag.java:444)
at coldfusion.filter.CfincludeFilter.invoke(CfincludeFilter.java:65)
at coldfusion.filter.IpFilter.invoke(IpFilter.java:64)
at coldfusion.filter.ApplicationFilter.invoke(ApplicationFilter.java:449)
at coldfusion.filter.MonitoringFilter.invoke(MonitoringFilter.java:40)
at coldfusion.filter.PathFilter.invoke(PathFilter.java:112)
at coldfusion.filter.ExceptionFilter.invoke(ExceptionFilter.java:94)
at coldfusion.filter.BrowserDebugFilter.invoke(BrowserDebugFilter.java:79)
at coldfusion.filter.ClientScopePersistenceFilter.invoke(ClientScopePersistenceFilter.java:28)
at coldfusion.filter.BrowserFilter.invoke(BrowserFilter.java:38)
at coldfusion.filter.NoCacheFilter.invoke(NoCacheFilter.java:58)
at coldfusion.filter.GlobalsFilter.invoke(GlobalsFilter.java:38)
at coldfusion.filter.DatasourceFilter.invoke(DatasourceFilter.java:22) …Run Code Online (Sandbox Code Playgroud) 是否有更好的方法来处理对象(Product)的实例化,这取决于另一个对象类型(Condition)而不是使用if-else配对,instanceof如下面的代码所示?
import java.util.ArrayList;
import java.util.List;
abstract class AbstractProduct {
private AbstractCondition condition;
public AbstractProduct(AbstractCondition condition) {
this.condition = condition;
}
public abstract void doSomething();
}
class ProductA extends AbstractProduct {
AbstractCondition condition;
public ProductA(AbstractCondition condition) {
super(condition);
}
@Override
public void doSomething() {
System.out.println("I'm Product A");
}
}
class ProductB extends AbstractProduct {
public ProductB(AbstractCondition condition) {
super(condition);
}
@Override
public void doSomething() {
System.out.println("I'm Product B");
}
}
class AbstractCondition { }
class …Run Code Online (Sandbox Code Playgroud) java-6 ×10
java ×9
java-7 ×3
applet ×1
classloader ×1
coldfusion ×1
compilation ×1
dom4j ×1
eclipse ×1
eclipse-juno ×1
instanceof ×1
javadoc ×1
media ×1
oop ×1
package ×1
permgen ×1
preferences ×1
resources ×1
spring ×1
xsd ×1