java.net.MalformedURLException: unknown protocol: c

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java.net.MalformedURLException: unknown protocol: c相关的知识,希望对你有一定的参考价值。

项目部署在tomcat下,启动的时候报错:
java.net.MalformedURLException: unknown protocol: c
at java.net.URL.<init>(URL.java:574)
at java.net.URL.<init>(URL.java:464)
at java.net.URL.<init>(URL.java:413)
at com.sun.org.apache.xerces.internal.impl.XMLEntityManager.setupCurrentEntity(XMLEntityManager.java:650)
at com.sun.org.apache.xerces.internal.impl.XMLVersionDetector.determineDocVersion(XMLVersionDetector.java:186)
at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:771)...
(

报错有很多种的。

Tomcat部署项目时启动报错总结

1、 虚拟机报错端口被占用

tomcat的默认端口是8080(或者其他自己设置的),可能已经被其他占用。
解决方法:在tomcat安装路径下conf文件夹中的server.xml中把断口号改掉!如果一台机器上使用多个tomcat,则改掉所有相关的端口避免重复了,包括如下:

在server.xml中找到如下地方改掉port的值

 

(改完后看看和本机上正在用的tomcat是不是有重复的port)。 

2、 tomcat的启动窗口一闪而过

Tomcat启动的dos窗口一闪而过,如何看出错信息?

在DOS窗口运行STARTUP.BAT文件,
另外,吧startup.bat文件最后的
call "%EXECUTABLE%" start %CMD_LINE_ARGS%
改成:
call "%EXECUTABLE%" run %CMD_LINE_ARGS%

分析原因1: jdk的环境变量没有配置好

解决方法:检查jdk环境变量的配置是否正确,或者重新配置jdk的系统环境变量

JDK环境变量配置的步骤如下:

1.我的电脑-->属性-->高级-->环境变量.

2.配置用户变量:

a.新建 JAVA_HOME             

C:\\Program Files\\Java\\j2sdk1.5.0 (JDK的安装路径)

b.新建 PATH (注意:把java的配置放在path的最前面)            

%JAVA_HOME%\\bin;%JAVA_HOME%\\jre\\bin        

c.新建 CLASSPATH           

.;%JAVA_HOME%\\lib;%JAVA_HOME%\\lib\\tools.jar 

3.测试环境变量配置是否成功:   

开始-->运行--〉CMD   

键盘敲入: JAVAC   JAVA        

出现相应的命令,而不是出错信息,即表示配置成功! 

环境变量配置的理解:

1. PATH环境变量。作用是指定命令搜索路径,在i命令行下面执行命令如javac编译java程序时,它会到PATH变量所指定的路径中查找看是否能找到相应的命令程序。我们需要把jdk安装目录下的bin目录增加到现有的PATH变量中,bin目录中包含经常要用到的可执行文件如javac/java/javadoc等待,设置好PATH变量后,就可以在任何目录下执行javac/java等工具了。

2. CLASSPATH环境变量。作用是指定类搜索路径,要使用已经编写好的类,前提当然是能够找到它们了,JVM就是通过CLASSPTH来寻找类的。我们需要把jdk安装目录下的lib子目录中的dt.jar和tools.jar设置到CLASSPATH中,当然,当前目录“.”也必须加入到该变量中。

3. JAVA_HOME环境变量。它指向jdk的安装目录,Eclipse/NetBeans/Tomcat等软件就是通过搜索JAVA_HOME变量来找到并使用安装好的jdk。 

分析原因2:分析tomcat日志文件

今天又遇到了Apache Tomcat 启动不了的问题,在myeclipse下能打开,其他情况下却打不开,症状是start之后闪了一下,然后启动界面就消失了,而Tomcat 还是没有启动.

我在Apache Tomcat 的安装目录下打开logs文件夹,找到今天的日志进行分析后发现错误原因是找不到一个模块.

[2007-09-11 22:40:30] [986  prunsrv.c] [error] Failed creating java D:\\Program Files\\jre1.6.0\\bin\\client\\jvm.dll
[2007-09-11 22:40:30] [1260 prunsrv.c] [error] ServiceStart returned 1
[2007-09-11 22:40:30] [info] Run service finished.
[2007-09-11 22:40:30] [info] Procrun finished.
[2007-09-11 22:40:35] [info] Procrun (2.0.3.0) started
[2007-09-11 22:40:35] [info] Running Service...
[2007-09-11 22:40:35] [info] Starting service...
[2007-09-11 22:40:35] [174  javajni.c] [error] 找不到指定的模块。

于是我把jre里的msvcr71.dll文件拷贝到C:\\windows\\system32下面,重新启动Tomcat 后,问题解决了。

分析原因3:

3、 tomcat启动后报的错误总结

问题描述1

*严重: Error listenerStart

*严重: Context [] startup failed due to previous errors

在发布项目是Tomcat在项目中未找到某些文件
1.检查是否把相关的 jar 包也同时发布了
2.检查相关class文件是否发布

tomcat的JDK版本与IDE的JDK不一致.

检查server.xml文件中的<context  的path=?配置是否和数据库中的path一致。 

问题描述2

*严重: IOException while loading persisted sessions: java.io.EOFException

*严重: Exception unloading sessions to persistent storage

java.io.FileNotFoundException: F:\\apache-tomcat-5.5.29\\apache-tomcat-5.5.29\\work\\Catalina\\localhost\\host-manager\\SESSIONS.ser (系统找不到指定的路径。)

*严重: Error initializing endpoint

java.lang.Exception: Socket bind failed: [730048] ?????????×???(Э?é/??????/???)????í?????Ρ?

解决办法: 
1> stop tomcat 
2>盘符:/ Apache Software Foundation\\Tomcat 6.0\\work\\Catalina\\localhost 
3>其中的文件夹看一遍,是否有session.ser 文件 
4>删除这些文件夹(搞不真的文件夹可以不删,只删除自己熟悉的,比如自己的项目,但其它文件夹中的session.ser也必须删除) 
5>重起tomcat 
6>如果还是上面的错误,再看看文件夹了是否还有session.ser 文件,不过一般都可以使用了  

问题描述3

*报错日志:java.lang.reflect.InvocationTargetException

Caused by: java.lang.OutOfMemoryError: unable to create new native thread

意思内存不足,不知道tomcat能不能设定运行时占用内存大小。或者设定有错,或者机器配置不足。 

问题描述4

*严重: Error initializing endpoint
java.net.SocketException: Unrecognized Windows Sockets error: 0: JVM_Bind

*严重: Catalina.start
LifecycleException:  Protocol handler initialization failed: java.net.SocketException: Unrecognized Windows Sockets error: 0: JVM_Bind

*严重: Error starting endpoint
java.net.SocketException: Unrecognized Windows Sockets error: 0: JVM_Bind

*严重: Catalina.start: 
LifecycleException:  service.getName(): "Catalina";  Protocol handler start failed: java.net.SocketException: Unrecognized Windows Sockets error: 0: JVM_Bind

你的tomcat 的 8080 端口 或者是 80 端口被某个应用程序占用了   你可以先不要链接网线  或者是把 tomcat的端口不要改成 80端口   因为浏览器默认或使用80端口。 

问题描述5

我的Tomcat在不加载到数据库的时候可以正常启动 但是在配了数据库加载到Servlet去的时候再启动就出错大致的错误是: 
*严重: Parse Fatal Error at line 1 column 198: Invalid byte 2 of 2-byte UTF-8 sequence. 
org.xml.sax.SAXParseException: Invalid byte 2 of 2-byte UTF-8 sequence.

应该不是编码问题 ,我用得数据库mysql编码是:gb2312,但是jsp中是utf-8 是可以得。 看上面得出错信息,应该是配置文件出错了,导致xml不能解析,看看你得web配置文件。 

问题描述6

*The Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path: C:\\Program Files\\Java\\jdk1.6.0_03\\bin;C:\\Program Files\\apache-tomcat-6.0.9\\bin

可能是没有设置环境变量,所以找不到编译器

这只是一个信息(而非错误),表示您的路径中没有找到用于优化性能的APR(Apache Portable Runtime)文档,但多数情况下并不会影响您的项目运行,可以被忽略。关于APR的config是在server.xml中:
<Listener className="org.apache.catalina.core.AprLifecycleListener" />
所以如果您的项目和别人的项目都发布在同一个Server上然后重启Server,应该都会看到这个信息。如果Tomcat已经在运行而您发布项目之后没有重启,可能也不会看到。

参考技术A 这个错误很明显呀,
java.net.MalformedURLException: unknown protocol: c
这个错一般有两种原因导致:
1、URL协议、格式或者路径错误, 好好检查下你程序中的代码
如果是路径问题,最好不要包含中文路径,因为有时中文路径会乱码,导致无法识别

2、jar问题:用jdom解析xml文件,如果应用路径里有gnujaxp.jar包的话,jdom就会
调用它去解析xml文件,导致上述异常的出现。
如果是这个问题,解决方法:在应用路径里去掉对gnujaxp.jar包的引用。
在我的工程中始终没有找到gnujaxp.jar包
本回答被提问者采纳

我怎样才能将 XPath 与 java 一起用于这个 XML?

【中文标题】我怎样才能将 XPath 与 java 一起用于这个 XML?【英文标题】:How can i go use XPath with java for this XML? 【发布时间】:2021-09-10 14:12:42 【问题描述】:

这是一个缩短版本,出于 xml 即时接收的安全原因而更改了数据,我正在尝试检查字段“workemail”是否为空,如果不是,我将创建一个:

我已经尝试使用它的绝对路径和相对路径,并使用 getLength 来查看它是否给了我任何东西,但我只得到:

java.net.MalformedURLException: no protocol



public void checkEmployeeEmail(String input) throws IOException, ParserConfigurationException, SAXException, XPathExpressionException 
        DocumentBuilderFactory factory =
                DocumentBuilderFactory.newInstance();
        DocumentBuilder builder = factory.newDocumentBuilder();

        StringBuilder xmlStringBuilder = new StringBuilder();
        ByteArrayInputStream inputStream =  new ByteArrayInputStream(
                xmlStringBuilder.toString().getBytes("UTF-8"));
        Document doc = builder.parse(input);
        XPath xPath =  XPathFactory.newInstance().newXPath();
        String expression = "//*/PersonalInfo_GetAll_AllEmployeesByCompanyResult/PersonalInfoItem/EmailWork";
        NodeList nodeList = (NodeList) xPath.compile(expression).evaluate(doc, XPathConstants.NODESET);
        System.out.println(nodeList.getLength());

    





<?xml version="1.0" encoding="utf-8"?>

<soap:Envelope
    xmlns:soap="http://www.w3.org/2003/05/soap-envelope"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:xsd="http://www.w3.org/2001/XMLSchema">

    <soap:Body>
        <PersonalInfo_GetAll_AllEmployeesByCompanyResponse
            xmlns="https://api.nmbrs.nl/soap/v3/EmployeeService">
            <PersonalInfo_GetAll_AllEmployeesByCompanyResult>
                <PersonalInfoItem>
                    <EmployeeId>1</EmployeeId>
                    <EmployeePersonalInfos>
                        <PersonalInfo_V2>
                            <Id>1</Id>
                            <DisplayName>person 1</DisplayName>
                            <EmployeeNumber>7</EmployeeNumber>
                            <FirstName>firstname1</FirstName>
                            <Initials>T.T</Initials>
                            <LastName>firstname</LastName>
                            <Nickname>lastname</Nickname>
                            <Gender>female</Gender>
                            <NationalityCode>1</NationalityCode>
                            <PlaceOfBirth>amsterdam</PlaceOfBirth>
                            <CountryOfBirthISOCode>NL</CountryOfBirthISOCode>
                            <IdentificationNumber>NV2H6DD52</IdentificationNumber>
                            <IdentificationType>10</IdentificationType>
                            <TelephoneMobilePrivate>0000000</TelephoneMobilePrivate>
                            <TelephoneMobileWork>000000</TelephoneMobileWork>
                            <EmailPrivate>person@gmail.com</EmailPrivate>
                            <EmailWork>tblabla@workemail.com</EmailWork>
                            <BurgerlijkeStaat>2</BurgerlijkeStaat>
                            <Naamstelling>1</Naamstelling>
                            <Birthday>1994-04-14T00:00:00</Birthday>
                            <CreationDate>2020-07-30T08:54:41.04</CreationDate>
                            <StartPeriod>7</StartPeriod>
                            <StartYear>2020</StartYear>
                        </PersonalInfo_V2>
                        <PersonalInfo_V2>
                            <Id>98351</Id>
                            <DisplayName>person2</DisplayName>
                            <EmployeeNumber>7</EmployeeNumber>
                            <LastName>lastname2</LastName>
                            <Nickname>firstname2</Nickname>
                            <Gender>undefined</Gender>
                            <NationalityCode>0</NationalityCode>
                            <IdentificationType>0</IdentificationType>
                            <EmailWork>person2@workemail.com</EmailWork>
                            <BurgerlijkeStaat>0</BurgerlijkeStaat>
                            <Naamstelling>0</Naamstelling>
                            <Birthday>0001-01-01T00:00:00</Birthday>
                            <CreationDate>2020-06-17T12:52:21.273</CreationDate>
                            <StartPeriod>1</StartPeriod>
                            <StartYear>1</StartYear>
                        </PersonalInfo_V2>
                    </EmployeePersonalInfos>
                </PersonalInfoItem>
                 </EmployeePersonalInfos>
                </PersonalInfoItem>
            </PersonalInfo_GetAll_AllEmployeesByCompanyResult>
        </PersonalInfo_GetAll_AllEmployeesByCompanyResponse>
    </soap:Body>
</soap:Envelope>

【问题讨论】:

查看这个答案:***.com/a/6392700/3710053 了解如何在 Java 中使用 XPath 中的命名空间 【参考方案1】:

你需要改变:

Document doc = builder.parse(input);

收件人:

Document doc = builder.parse(new File("C:\\temp\\test.xml"));

解释见下文:java.net.MalformedURLException: no protocol

几件事:

    我没有发现以下任何用途:

    ByteArrayInputStream inputStream = new ByteArrayInputStream( xmlStringBuilder.toString().getBytes("UTF-8"));

    您可能找不到电子邮件,因为您的 xml 具有命名空间定义。如果遇到这种情况,请参阅:

how to ignore namespaces with XPath

    您的 xml 格式错误。我在下面给出了固定的:

       <?xml version="1.0" encoding="utf-8"?>
       <soap:Envelope
       xmlns:soap="http://www.w3.org/2003/05/soap-envelope"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    
       <soap:Body>
           <PersonalInfo_GetAll_AllEmployeesByCompanyResponse
               xmlns="https://api.nmbrs.nl/soap/v3/EmployeeService">
               <PersonalInfo_GetAll_AllEmployeesByCompanyResult>
                   <PersonalInfoItem>
                       <EmployeeId>1</EmployeeId>
                       <EmployeePersonalInfos>
                           <PersonalInfo_V2>
                               <Id>1</Id>
                               <DisplayName>person 1</DisplayName>
                               <EmployeeNumber>7</EmployeeNumber>
                               <FirstName>firstname1</FirstName>
                               <Initials>T.T</Initials>
                               <LastName>firstname</LastName>
                               <Nickname>lastname</Nickname>
                               <Gender>female</Gender>
                               <NationalityCode>1</NationalityCode>
                               <PlaceOfBirth>amsterdam</PlaceOfBirth>
                               <CountryOfBirthISOCode>NL</CountryOfBirthISOCode>
                               <IdentificationNumber>NV2H6DD52</IdentificationNumber>
                               <IdentificationType>10</IdentificationType>
                               <TelephoneMobilePrivate>0000000</TelephoneMobilePrivate>
                               <TelephoneMobileWork>000000</TelephoneMobileWork>
                               <EmailPrivate>person@gmail.com</EmailPrivate>
                               <EmailWork>tblabla@workemail.com</EmailWork>
                               <BurgerlijkeStaat>2</BurgerlijkeStaat>
                               <Naamstelling>1</Naamstelling>
                               <Birthday>1994-04-14T00:00:00</Birthday>
                               <CreationDate>2020-07-30T08:54:41.04</CreationDate>
                               <StartPeriod>7</StartPeriod>
                               <StartYear>2020</StartYear>
                           </PersonalInfo_V2>
                           <PersonalInfo_V2>
                               <Id>98351</Id>
                               <DisplayName>person2</DisplayName>
                               <EmployeeNumber>7</EmployeeNumber>
                               <LastName>lastname2</LastName>
                               <Nickname>firstname2</Nickname>
                               <Gender>undefined</Gender>
                               <NationalityCode>0</NationalityCode>
                               <IdentificationType>0</IdentificationType>
                               <EmailWork>person2@workemail.com</EmailWork>
                               <BurgerlijkeStaat>0</BurgerlijkeStaat>
                               <Naamstelling>0</Naamstelling>
                               <Birthday>0001-01-01T00:00:00</Birthday>
                               <CreationDate>2020-06-17T12:52:21.273</CreationDate>
                               <StartPeriod>1</StartPeriod>
                               <StartYear>1</StartYear>
                           </PersonalInfo_V2>                        
                       </EmployeePersonalInfos>
                   </PersonalInfoItem>
               </PersonalInfo_GetAll_AllEmployeesByCompanyResult>
           </PersonalInfo_GetAll_AllEmployeesByCompanyResponse>
       </soap:Body>
     </soap:Envelope>
    

【讨论】:

感谢您的回复!但我从 api 调用中获取 xml,它不是我计算机上的文件,所以我在那里使用的“输入”来自我用来获取 xml 的函数。 @saruronin 好的。然后你可以使用***.com/questions/562160/…中的方法

以上是关于java.net.MalformedURLException: unknown protocol: c的主要内容,如果未能解决你的问题,请参考以下文章