我正在尝试针对XSD验证非常XML(~200MB).这花了将近3个小时.我不确定我在这里做错了什么?
SchemaFactory sf = SchemaFactory.newInstance(W3C_XML_SCHEMA_NS_URI);
Schema schema = sf.newSchema(new File(this.productExtraInfoXsd));
DocumentBuilderFactory domFactory = DocumentBuilderFactory.newInstance();
domFactory.setNamespaceAware(true);
DocumentBuilder builder = domFactory.newDocumentBuilder();
Document doc = builder.parse(new File(filePath));
DOMSource domSource = new DOMSource(doc);
DOMResult result = new DOMResult();
Validator validator = schema.newValidator();
validator.validate(domSource, result);
Run Code Online (Sandbox Code Playgroud) 我想使用Tomcat 6.0提供的标准资源工厂,它为我创建了javax.mail.Sessions实例.如JNDI Resource HOW-TO教程中所述.
我的META-INF/context.xml看起来像:
<?xml version="1.0" encoding="UTF-8"?>
<Context reloadable="true">
<Resource name="mail/Session"
auth="Container"
type="javax.mail.Session"
mail.smtp.host="smtp.gmail.com"
mail.smtp.port="587"
mail.smtp.auth="true"
mail.smtp.user="someone@gmail.com"
mail.smtp.password="secretpassword"
mail.smtp.starttls.enable="true"/>
</Context>
Run Code Online (Sandbox Code Playgroud)
我在WEB-INF/web.xml中有下一个resource-ref,就在</ webapps>之前.Web.xml验证.我使用McDowell的方式进行了验证.
<resource-ref>
<description>Resource reference to a factory for javax.mail.Session instances that may be used for sending electronic mail messages, preconfigured
to connect to the appropiate SMTP server.
</description>
<res-ref-name>mail/Session</res-ref-name>
<res-type>javax.mail.Session</res-type>
<res-auth>Container</res-auth>
</resource-ref>
Run Code Online (Sandbox Code Playgroud)
我正在使用下一个代码snipett访问我的javax.mail.Session对象.
Context initCtx = new InitialContext();
Context envCtx = (Context) initCtx.lookup("java:comp/env");
Session session = (Session)envCtx.lookup("mail/Session");
System.out.println("HERE smtp.user: " + session.getProperty("mail.smtp.user"));
Run Code Online (Sandbox Code Playgroud)
我在一个示例应用程序中测试它并且它工作 不幸的是,当我将相同的代码移动到struts应用程序时,我在上面的print语句中得到NULL.我在单例类中查找上下文,称为邮件程序(在我的WEB-INF/classes文件夹中定义)但如果我在Struts操作类中查找上下文,我会遇到同样的问题. …
我正在写xsd和代码来验证,所以我在这里有很好的控制权.
我想有一个上传工具,可以根据xml文件向我的应用程序添加内容.应根据其他部分中的某个值,针对不同的模式验证xml文件的一部分.这是一个例子来说明:
<foo>
<name>Harold</name>
<bar>Alpha</bar>
<baz>Mercury</baz>
<!-- ... more general info that applies to all foos ... -->
<bar-config>
<!-- the content here is specific to the bar named "Alpha" -->
</bar-config>
<baz-config>
<!-- the content here is specific to the baz named "Mercury" -->
</baz>
</foo>
Run Code Online (Sandbox Code Playgroud)
在这种情况下,内容有一些受控的词汇表<bar>,我可以处理那部分就好了.然后,根据条形值,应使用适当的xml架构来验证bar-config的内容.同样适用于baz和baz-config.
执行解析/验证的代码是用Java编写的.不确定解决方案的语言依赖性.
理想情况下,该解决方案将允许xml作者声明适当的模式位置以及什么不是,以便他/她可以在足够智能的编辑器中动态验证xml.
此外,对于可能的值<bar>和<baz>是正交的,所以我不希望通过延长每一个可能的酒吧/巴兹组合来做到这一点.我的意思是,如果有24个可能的条形值/模式和8个可能的baz值/模式,我希望能够写出1 + 24 + 8 = 33个总模式,而不是1*24*8 = 192个模式.
另外,如果可能的话,我宁愿不将bar-config和baz-config分解成单独的xml文件.我意识到可能会使所有问题变得更容易,因为每个xml文件都有一个模式,但我正在尝试查看是否有一个好的单xml文件解决方案.
我正在编写一个java代码来验证针对XSD文件的XML.Eclipse在以下代码中显示2个错误.
此行的多个标记 -
无法将URL解析为某种类型
SAXException无法解析为类型
import javax.xml.XMLConstants;
import javax.xml.transform.Source;
import javax.xml.transform.stream.StreamSource;
import javax.xml.validation.*;
public class xml_validator_class {
public static void main(String argv[]) {
URL schemaFile = new URL("xsdfile.xsd");
Source xmlFile = new StreamSource(new File("xmlfile.xml"));
SchemaFactory schemaFactory = SchemaFactory
.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
Schema schema = schemaFactory.newSchema(schemaFile);
Validator validator = schema.newValidator();
try {
validator.validate(xmlFile);
System.out.println(xmlFile.getSystemId() + " is valid");
} catch (SAXException e) {
System.out.println(xmlFile.getSystemId() + " is NOT valid");
System.out.println("Reason: " + e.getLocalizedMessage());
}
}
}
Run Code Online (Sandbox Code Playgroud)
请参考此链接以获取以下程序:
java ×3
xml ×3
xsd ×3
cocoa-touch ×1
eclipse ×1
email ×1
iphone ×1
jndi ×1
objective-c ×1
tomcat ×1
validation ×1