IOException parsing XML document from URL

fJavadream 发布于 04/21 12:42
阅读 117
收藏 0

最近一个学习dubbo案例eclipse运行正常,项目打包jar,运行报错。
在网上看到用classloader加载配置文件,不会出现路径问题,自己试了不行。就改成xwork的ClassLoaderUtil。
pom是用的shade方式打包依赖。
大神支招。
D:\forDubbo>java -jar provider01-0.0.1-SNAPSHOT.jar
2019-04-21 11:26:22 [org.springframework.context.support.ClassPathXmlApplication
Context]-[INFO] Refreshing org.springframework.context.support.ClassPathXmlAppli
cationContext@61e4705b: startup date [Sun Apr 21 11:26:22 CST 2019]; root of con
text hierarchy
2019-04-21 11:26:23 [org.springframework.beans.factory.xml.XmlBeanDefinitionRead
er]-[INFO] Loading XML bean definitions from URL [jar:file:/D:/forDubbo/provider
01-0.0.1-SNAPSHOT.jar!/provider.xml]
2019-04-21 11:26:23 [com.alibaba.dubbo.common.logger.LoggerFactory]-[INFO] using
 logger: com.alibaba.dubbo.common.logger.log4j.Log4jLoggerAdapter
2019-04-21 11:26:23 [org.springframework.beans.factory.xml.XmlBeanDefinitionRead
er]-[INFO] Loading XML bean definitions from URL [jar:file:/D:/forDubbo/provider
01-0.0.1-SNAPSHOT.jar!/xwork-default.xml]
Exception in thread "main" org.springframework.beans.factory.BeanDefinitionStore
Exception: IOException parsing XML document from URL [jar:file:/D:/forDubbo/prov
ider01-0.0.1-SNAPSHOT.jar!/xwork-default.xml]; nested exception is java.net.Conn
ectException: Connection timed out: connect
        at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.doLoadB
eanDefinitions(XmlBeanDefinitionReader.java:410)
        at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBea
nDefinitions(XmlBeanDefinitionReader.java:336)
        at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBea
nDefinitions(XmlBeanDefinitionReader.java:304)
        at org.springframework.beans.factory.support.AbstractBeanDefinitionReade
r.loadBeanDefinitions(AbstractBeanDefinitionReader.java:181)
        at org.springframework.beans.factory.support.AbstractBeanDefinitionReade
r.loadBeanDefinitions(AbstractBeanDefinitionReader.java:217)
        at org.springframework.beans.factory.support.AbstractBeanDefinitionReade
r.loadBeanDefinitions(AbstractBeanDefinitionReader.java:188)
        at org.springframework.beans.factory.support.AbstractBeanDefinitionReade
r.loadBeanDefinitions(AbstractBeanDefinitionReader.java:252)
        at org.springframework.context.support.AbstractXmlApplicationContext.loa
dBeanDefinitions(AbstractXmlApplicationContext.java:127)
        at org.springframework.context.support.AbstractXmlApplicationContext.loa
dBeanDefinitions(AbstractXmlApplicationContext.java:93)
        at org.springframework.context.support.AbstractRefreshableApplicationCon
text.refreshBeanFactory(AbstractRefreshableApplicationContext.java:129)
        at org.springframework.context.support.AbstractApplicationContext.obtain
FreshBeanFactory(AbstractApplicationContext.java:613)
        at org.springframework.context.support.AbstractApplicationContext.refres
h(AbstractApplicationContext.java:514)
        at org.springframework.context.support.ClassPathXmlApplicationContext.<i
nit>(ClassPathXmlApplicationContext.java:139)
        at org.springframework.context.support.ClassPathXmlApplicationContext.<i
nit>(ClassPathXmlApplicationContext.java:83)
        at com.test.provider.Provider.main(Provider.java:29)
Caused by: java.net.ConnectException: Connection timed out: connect
        at java.net.DualStackPlainSocketImpl.connect0(Native Method)
        at java.net.DualStackPlainSocketImpl.socketConnect(Unknown Source)
        at java.net.AbstractPlainSocketImpl.doConnect(Unknown Source)
        at java.net.AbstractPlainSocketImpl.connectToAddress(Unknown Source)
        at java.net.AbstractPlainSocketImpl.connect(Unknown Source)
        at java.net.PlainSocketImpl.connect(Unknown Source)
        at java.net.SocksSocketImpl.connect(Unknown Source)
        at java.net.Socket.connect(Unknown Source)
        at java.net.Socket.connect(Unknown Source)
        at sun.net.NetworkClient.doConnect(Unknown Source)
        at sun.net.www.http.HttpClient.openServer(Unknown Source)
        at sun.net.www.http.HttpClient.openServer(Unknown Source)
        at sun.net.www.http.HttpClient.<init>(Unknown Source)
        at sun.net.www.http.HttpClient.New(Unknown Source)
        at sun.net.www.http.HttpClient.New(Unknown Source)
        at sun.net.www.protocol.http.HttpURLConnection.getNewHttpClient(Unknown
Source)
        at sun.net.www.protocol.http.HttpURLConnection.plainConnect0(Unknown Sou
rce)
        at sun.net.www.protocol.http.HttpURLConnection.plainConnect(Unknown Sour
ce)
        at sun.net.www.protocol.http.HttpURLConnection.connect(Unknown Source)
        at sun.net.www.protocol.http.HttpURLConnection.getInputStream0(Unknown S
ource)
        at sun.net.www.protocol.http.HttpURLConnection.getInputStream(Unknown So
urce)
        at com.sun.org.apache.xerces.internal.impl.XMLEntityManager.setupCurrent
Entity(Unknown Source)
        at com.sun.org.apache.xerces.internal.impl.XMLEntityManager.startEntity(
Unknown Source)
        at com.sun.org.apache.xerces.internal.impl.XMLEntityManager.startDTDEnti
ty(Unknown Source)
        at com.sun.org.apache.xerces.internal.impl.XMLDTDScannerImpl.setInputSou
rce(Unknown Source)
        at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl$DTDDri
ver.dispatch(Unknown Source)
        at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl$DTDDri
ver.next(Unknown Source)
        at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl$Prolog
Driver.next(Unknown Source)
        at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(U
nknown Source)
        at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImp
l.scanDocument(Unknown Source)
        at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(U
nknown Source)
        at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(U
nknown Source)
        at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(Unknown So
urce)
        at com.sun.org.apache.xerces.internal.parsers.DOMParser.parse(Unknown So
urce)
        at com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderImpl.parse(Unk
nown Source)
        at org.springframework.beans.factory.xml.DefaultDocumentLoader.loadDocum
ent(DefaultDocumentLoader.java:76)
        at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.doLoadD
ocument(XmlBeanDefinitionReader.java:429)
        at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.doLoadB
eanDefinitions(XmlBeanDefinitionReader.java:391)
        ... 14 more
类:

package com.test.provider;

import java.io.IOException;

import org.springframework.context.support.ClassPathXmlApplicationContext;

import com.opensymphony.xwork2.util.ClassLoaderUtil;

public class Provider {
    static {
        ClassLoaderUtil.getResourceAsStream("log4j.properties", String.class);
    }
    public static void main(String[] args) throws IOException {
        ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("classpath*:*.xml");
        context.start();
        System.in.read();
    }
}
//
package com.test.service;

import org.springframework.stereotype.Service;

public class TestServiceImpl implements TestService{

    @Override
    public String test() {
        System.out.println("test success");
        return "provider01";
    }

}

provider.xml:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:mvc="http://www.springframework.org/schema/mvc"
      xmlns:context="http://www.springframework.org/schema/context"
      xmlns:aop="http://www.springframework.org/schema/aop" 
      xmlns:tx="http://www.springframework.org/schema/tx"
      xmlns:task="http://www.springframework.org/schema/task"
      xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"
      xsi:schemaLocation="http://www.springframework.org/schema/beans 
          http://www.springframework.org/schema/beans/spring-beans-4.3.xsd 
         http://www.springframework.org/schema/mvc 
         http://www.springframework.org/schema/mvc/spring-mvc-4.3.xsd 
         http://www.springframework.org/schema/context 
         http://www.springframework.org/schema/context/spring-context-4.3.xsd 
         http://www.springframework.org/schema/aop 
         http://www.springframework.org/schema/aop/spring-aop-4.3.xsd 
         http://www.springframework.org/schema/tx 
         http://www.springframework.org/schema/tx/spring-tx-4.3.xsd
         http://www.springframework.org/schema/task 
         http://www.springframework.org/schema/task/spring-task-4.3.xsd
         http://code.alibabatech.com/schema/dubbo        
         http://code.alibabatech.com/schema/dubbo/dubbo.xsd">
 
    <!-- 提供方应用信息,用于计算依赖关系 -->
    <dubbo:application name="provider"  />
 
    <!-- 使用zookeeper广播注册中心暴露服务地址 -->
    <dubbo:registry address="zookeeper://192.168.1.100:2181"/>
 
    <!-- 用dubbo协议在20880端口暴露服务 -->
    <dubbo:protocol name="dubbo" port="20881" />
 
    <!-- 和本地bean一样实现服务 -->
    <bean id="testService" class="com.test.service.TestServiceImpl" />
    
     
    <!-- 声明需要暴露的服务接口 -->
    <dubbo:service interface="com.test.service.TestService" ref="testService" />
 
</beans>

java类都没有注解:另外还有个applicationContext.xml

内容是<context:component-scan base-package="com.test" />

 

个人觉得把该xml放在项目里一起打包,没有影响。但是,实际那样会增加一个错误

nested exception is java.lang.IllegalStateException: Duplicate applic
ation configs: <dubbo:application name="provider" id="provider" /> and <dubbo:ap
plication name="provider" id="provider2" />

加载中
0
f
fJavadream

1.log4j文件名必须只能是log4j.properties,其实后来发现不用写代码读取log4j,应该是dubbo自动可以日志输出。
2.Provider类里main方法里ClassPathXmlApplicationContext()构造方法接收数组,几个xml文件以字符串数组形式new String[] {"provider.xml","applicationContext.xml"}传入。
3.中间还遇到设置ip别名等问题(consumer打包是用eclipse导出war,cmd导出有问题.provider可以用cmd命令打包)...
4.防火墙指定端口开放。vi iptables 然后 service network restart,重启永久生效。
5.访问consumer 结果NullPointerException,主要错误信息如下:   

#######(在linux上运行,dubbo.properties的、provider、consumer.xml项目地址配置都改了:192.168.139.129)#######
com.alibaba.dubbo.rpc.RpcException: Failed to invoke the method test in the service com.test.service.TestService. Tried 3 times of the providers [117.59.224.141:20881] (1/1) from the registry 192.168.139.129:2181 on the consumer 117.59.224.141 using the dubbo version 2.0.1. Last error is: Invoke remote method timeout. method: test, provider: dubbo://117.59.224.141:20881/com.test.service.TestService?anyhost=true&application=consumer01&check=false&dubbo=0.0.1-SNAPSHOT&generic=false&interface=com.test.service.TestService&methods=test&pid=5857&register.ip=117.59.224.141&remote.timestamp=1556210411228&revision=0.0.1-SNAPSHOT&side=consumer&timestamp=1556210519328, cause: Waiting server-side response timeout. start time: 2019-04-26 00:45:40.018, end time: 2019-04-26 00:45:41.019, client elapsed: 0 ms, server elapsed: 1001 ms, timeout: 1000 ms, request: Request [id=5, version=2.0.0, twoway=true, event=false, broken=false, data=RpcInvocation [methodName=test, parameterTypes=[], arguments=[], attachments={path=com.test.service.TestService, interface=com.test.service.TestService, version=0.0.0}]], channel: /117.59.224.141:57990 -> /117.59.224.141:20881

根据错误信息,consumer最终需要到117.59.224.141获取服务。

虚拟机linux上eth0的ip是192.168.139.129
对操作系统不熟,我曾经看网上说法以为要改变什么网卡优先级。
实际解决办法就是新建一个虚拟ip!!!
在ifcfg-eth0同目录下新建ifcfg-eth0:x文件,内容大致如下:
DEVICE=eth0:0                 //虚拟网络接口,随意                                    
ONBOOT=yes                    //系统启动时激活
BOOTPROTO=static             //使用静态ip地址                
IPADDR=117.59.224.141         //该虚拟网络接口的ip别名,随意
NETMASK=255.255.255.0         //子网掩码,对应ip别名
GATEWAY=117.59.224.1           //网关,对应ip别名
HWADDR=00:10:5A:5E:B1:E4      //网卡MAC地址,无需更改(同eth0)                   
USERCTL=no                    //是否给予非root用户设备管理权限

保存重启生效,再启动zookeeper、dubbo、 java -jar provider01.jar、启动该虚拟机上安装的另外一个载有consumer的tomcat。
访问即可。
这个linux上启动跑dubbo项目,刚开始不熟,中间遇到好多问题,每个问题都卡了好久,都没抱希望了。
想不到最后居然把初识dubbo的小demo所有问题都解决了。。。

ps:例子是参考的https://blog.csdn.net/xianghui12333/article/details/71172342来上手的

0
f
fJavadream

背景:本来是zookeeper和dubbo都在虚拟机linux上启动,provider注册在windows上,consumer不管在虚拟机linux还是windows上注册都能正常访问consumer。但是,provider注册在linux上,访问consumer就出现了上面所说的空指针。最后发现是主要原因是虚拟ip的问题,最终增加虚拟ip,实现zookeeper、dubbo、provider、consumer都在虚拟机linux启动运行,windows浏览器正常访问。

返回顶部
顶部