0

機能では、次のように JCIFS の SmbFile コンセプトを使用して、リモート保護共有フォルダーにあるアップロードされた xml ファイルから値を読み取るロジックを組み立てました。

String JAXP_SCHEMA_LANGUAGE = "http://java.sun.com/xml/jaxp/properties/schemaLanguage";
String JAXP_SCHEMA_SOURCE = "http://java.sun.com/xml/jaxp/properties/schemaSource";
String W3C_XML_SCHEMA = "http://www.w3.org/2001/XMLSchema";    
String strStImgPath = PROTECTED_SHARE_FOLDER_PATH;
String strFileName = "SampleFile.xml";
NtlmPasswordAuthentication auth = new NtlmPasswordAuthentication(DOMAIN, USER,    
PASSWORD);
SmbFile fNew = new SmbFile(strStImgPath, strFileName, auth);
SmbFileOutputStream fout = new SmbFileOutputStream(fNew, false);
fout.write(foFile.getFileData());
fout.close();

Document doc = null;
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
factory.setValidating(true);
factory.setNamespaceAware(true);
try {
   factory.setAttribute(JAXP_SCHEMA_LANGUAGE, W3C_XML_SCHEMA);
   factory.setAttribute(JAXP_SCHEMA_SOURCE, new SmbFile(schemaSource, auth));
} catch (IllegalArgumentException x) {
   x.printStackTrace();
}

try {
   DocumentBuilder builder = factory.newDocumentBuilder();
   DefaultErrorHandler parserErrors = new DefaultErrorHandler();
   builder.setErrorHandler(parserErrors);
   **doc = builder.parse(new SmbFileInputStream(fNew));**
} catch (Exception e) {
   e.printStackTrace();
}

この行doc = builder.parse(new SmbFileInputStream(fNew));は次の例外をスローします。

org.xml.sax.SAXException: "http://java.sun.com/xml/jaxp/properties/schemaSource" property cannot have a value of type {jcifs.smb.SmbFile}. Possible types of the value supported are String, File, InputStream, InputSource OR an array of these types.
    at org.apache.xerces.parsers.DOMParser.parse(Unknown Source)
    at org.apache.xerces.jaxp.DocumentBuilderImpl.parse(Unknown Source)
    at javax.xml.parsers.DocumentBuilder.parse(Unknown Source)
    at com.boeing.app.UploadStInfoAction.execute(UploadStInfoAction.java:299)
    at org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:431)
    at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:236)
    at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1196)
    at org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:432)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:709)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:270)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:191)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:227)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:174)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:104)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:108)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:211)
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:817)
    at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:623)
    at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:444)
    at java.lang.Thread.run(Unknown Source)

なぜこの例外が発生するのか誰にもわかりますか? この問題を解決するための代替手段は何ですか。

ありがとう。

4

1 に答える 1

0

うーん、エラー メッセージは一目瞭然ですか?

パーサーは、SmbFile をスキーマ ソースとして認識しません (また、SmbFile のドキュメントを参照すると、たとえばhttp://www.jarvana.com/jarvana/view/org/samba/jcifs/jcifs/1.2.19/jcifs- 1.2.19-javadoc.jar!/jcifs/smb/SmbFile.html )、SmbFile がパーサーによって受け入れられるどのクラスからも派生していないことがわかります。

綿密な推測として、私は試してみます

factory.setAttribute(JAXP_SCHEMA_SOURCE, new SmbFile(schemaSource, auth).getInputStream());

そして何が起こるか見てください...

于 2013-03-26T09:09:44.803 に答える