xfire1.2.6インターネット環境にアクセスできない問題と解決策
先日xfireでインタフェースを開発しましたが、もともと工事でインターネットにアクセスできる場合は何の問題もありませんでしたが、昨日お客様に導入されたイントラネット環境に問題が発生しました.異常は以下の通りです.
javax.faces.FacesException: java.net.UnknownHostException: www.springframework.org
ホストが見つかりません.org、インターネットにアクセスできないので
問題の出所を見つけて、xfireのプロファイル/WEB-INF/xfire-servlet.xml、このファイルの内容は以下の通りです.
問題は
"http://www.springframework.org/dtd/spring-beans.dtd">
インターネットにアクセスできない条件でアクセスできないhttp://www.springframework.org/dtd/spring-beans.dtd
ソリューションの試行:
ネットで長い間探していたが、DOCTYPEをローカルファイルにアクセスするように変更したという話が多かった.
spring-beans.dtdファイルはclasspathディレクトリの下、例えばtomcatのtomcat/bin/ディレクトリの下に配置されます.
変更後に起動しても、ホストwww.springframeworkが見つからないことがわかりました.org、よく探してみるとxfire-servletが原因です.xmlにはという行があります.
xfire.xmlに存在する
"http://www.springframework.org/dtd/spring-beans.dtd">
そしてxfire.xmlには別のxmlファイルも参照されます
customEditors.xmlにも存在する
"http://www.springframework.org/dtd/spring-beans.dtd">
なぜならxmlとcustomEditors.xmlはxfire-all-1.2.6、jarの中で、JARパッケージを修正したくないので、私は考えました.xfire.xmlとcustomEditors.xmlの内容はxfire-servletに直接コピーする.xmlでは、を参照します.
削除して、問題は解決することができて、修正したxfire-servlet.xmlは次のとおりです.
後でclasspathにspring-beansを入れると思った.dtdファイルが面倒なのでspring 2を使いたいです.xのschema方式はspring-beansを必要としない.dtdファイルです.方法はを外し、を
もちろん、工事で使われているspringパッケージは2.0以上に交換しなければなりません.そうしないと、リターンが間違っています.
org.xml.sax.SAXParseException: Document is invalid: no grammar found.
org.xml.sax.SAXParseException: Document root element "beans", must match DOCTYPE root "null".
質問のまとめ:
問題の鍵はxfire 1です.2.6のXML定義フォーマットはspring 1.x形式で、dtdはすべてネットワーク上で検証されるので、インターネットにアクセスできない環境ではエラーが報告されます.まず、xfire.xmlとcustomEditors.xmlをxfire-servletにコピーします.xmlで.
そして、
工事用がspring 1である場合.x、spring-beansをdtdファイルはclasspathディレクトリの下に置いて、DOCTYPEを
工事用がspring 2である場合.x、を外し、を
添付ファイルにはxfireのパッケージとspring-beansがあります.dtdファイル
javax.faces.FacesException: java.net.UnknownHostException: www.springframework.org
ホストが見つかりません.org、インターネットにアクセスできないので
問題の出所を見つけて、xfireのプロファイル/WEB-INF/xfire-servlet.xml、このファイルの内容は以下の通りです.
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN"
"http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
<!-- XFire -->
<import resource="classpath:org/codehaus/xfire/spring/xfire.xml" />
<!-- url -->
<bean
class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
<property name="urlMap">
<map>
<entry key="/WSPersonsInfoService.ws">
<ref bean="WSPersonsInfoService" />
</entry>
</map>
</property>
</bean>
<!-- XFire -->
<bean id="baseWebService"
class="org.codehaus.xfire.spring.remoting.XFireExporter"
lazy-init="false" abstract="true">
<!-- xfire.xml -->
<property name="serviceFactory" ref="xfire.serviceFactory" />
<!-- xfire.xml xfire -->
<property name="xfire" ref="xfire" />
</bean>
<bean id="WSPersonsInfoService" parent="baseWebService">
<!-- bean -->
<property name="serviceBean" ref="WSPersonsInfoImp" />
<!-- bean -->
<property name="serviceClass"
value="com.ws.yxjsry.IWSPersonsInfo" />
</bean>
<bean id="WSPersonsInfoImp"
class="com.ws.yxjsry.WSPersonsInfoImp" />
</beans>
問題は
"http://www.springframework.org/dtd/spring-beans.dtd">
インターネットにアクセスできない条件でアクセスできないhttp://www.springframework.org/dtd/spring-beans.dtd
ソリューションの試行:
ネットで長い間探していたが、DOCTYPEをローカルファイルにアクセスするように変更したという話が多かった.
spring-beans.dtdファイルはclasspathディレクトリの下、例えばtomcatのtomcat/bin/ディレクトリの下に配置されます.
変更後に起動しても、ホストwww.springframeworkが見つからないことがわかりました.org、よく探してみるとxfire-servletが原因です.xmlには
xfire.xmlに存在する
"http://www.springframework.org/dtd/spring-beans.dtd">
そしてxfire.xmlには別のxmlファイルも参照されます
customEditors.xmlにも存在する
"http://www.springframework.org/dtd/spring-beans.dtd">
なぜならxmlとcustomEditors.xmlはxfire-all-1.2.6、jarの中で、JARパッケージを修正したくないので、私は考えました.xfire.xmlとcustomEditors.xmlの内容はxfire-servletに直接コピーする.xmlでは、
削除して、問題は解決することができて、修正したxfire-servlet.xmlは次のとおりです.
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans SYSTEM "spring-beans.dtd">
<!-- XFire -->
<bean id="xfire.customEditorConfigurer"
class="org.springframework.beans.factory.config.CustomEditorConfigurer">
<property name="customEditors">
<map>
<entry
key="org.codehaus.xfire.service.ServiceFactory">
<bean
class="org.codehaus.xfire.spring.editors.ServiceFactoryEditor">
<property name="transportManager"
ref="xfire.transportManager" />
</bean>
</entry>
</map>
</property>
</bean>
<bean id="xfire.serviceRegistry"
class="org.codehaus.xfire.service.DefaultServiceRegistry"
scope="singleton" />
<bean id="xfire.transportManager"
class="org.codehaus.xfire.transport.DefaultTransportManager"
scope="singleton" init-method="initialize" destroy-method="dispose">
</bean>
<bean id="xfire" class="org.codehaus.xfire.DefaultXFire"
scope="singleton">
<constructor-arg index="0">
<ref bean="xfire.serviceRegistry" />
</constructor-arg>
<constructor-arg index="1">
<ref bean="xfire.transportManager" />
</constructor-arg>
</bean>
<bean id="xfire.typeMappingRegistry"
class="org.codehaus.xfire.aegis.type.DefaultTypeMappingRegistry"
init-method="createDefaultMappings" scope="singleton">
</bean>
<bean id="xfire.aegisBindingProvider"
class="org.codehaus.xfire.aegis.AegisBindingProvider"
scope="singleton">
<constructor-arg index="0">
<ref bean="xfire.typeMappingRegistry" />
</constructor-arg>
</bean>
<bean id="xfire.serviceFactory"
class="org.codehaus.xfire.service.binding.ObjectServiceFactory"
scope="singleton">
<constructor-arg index="0">
<ref bean="xfire.transportManager" />
</constructor-arg>
<constructor-arg index="1">
<ref bean="xfire.aegisBindingProvider" />
</constructor-arg>
</bean>
<bean id="xfire.servletController"
class="org.codehaus.xfire.transport.http.XFireServletController"
scope="singleton">
<constructor-arg>
<ref bean="xfire" />
</constructor-arg>
</bean>
<bean id="xfire.messageServiceFactory"
class="org.codehaus.xfire.service.binding.ObjectServiceFactory">
<constructor-arg index="0" ref="xfire.transportManager" />
<constructor-arg index="1" ref="xfire.messageBindingProvider" />
<property name="style" value="message" />
</bean>
<bean id="xfire.messageBindingProvider"
class="org.codehaus.xfire.service.binding.MessageBindingProvider" />
<!-- url -->
<bean
class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
<property name="urlMap">
<map>
<entry key="/WSPersonsInfoService.ws">
<ref bean="WSPersonsInfoService" />
</entry>
</map>
</property>
</bean>
<!-- XFire -->
<bean id="baseWebService"
class="org.codehaus.xfire.spring.remoting.XFireExporter"
lazy-init="false" abstract="true">
<!-- xfire.xml -->
<property name="serviceFactory" ref="xfire.serviceFactory" />
<!-- xfire.xml xfire -->
<property name="xfire" ref="xfire" />
</bean>
<bean id="WSPersonsInfoService" parent="baseWebService">
<!-- bean -->
<property name="serviceBean" ref="WSPersonsInfoImp" />
<!-- bean -->
<property name="serviceClass"
value="com.ws.yxjsry.IWSPersonsInfo" />
</bean>
<bean id="WSPersonsInfoImp"
class="com.ws.yxjsry.WSPersonsInfoImp" />
</beans>
後でclasspathにspring-beansを入れると思った.dtdファイルが面倒なのでspring 2を使いたいです.xのschema方式はspring-beansを必要としない.dtdファイルです.方法はを外し、
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.0.xsd">
もちろん、工事で使われているspringパッケージは2.0以上に交換しなければなりません.そうしないと、リターンが間違っています.
org.xml.sax.SAXParseException: Document is invalid: no grammar found.
org.xml.sax.SAXParseException: Document root element "beans", must match DOCTYPE root "null".
質問のまとめ:
問題の鍵はxfire 1です.2.6のXML定義フォーマットはspring 1.x形式で、dtdはすべてネットワーク上で検証されるので、インターネットにアクセスできない環境ではエラーが報告されます.まず、xfire.xmlとcustomEditors.xmlをxfire-servletにコピーします.xmlで.
そして、
工事用がspring 1である場合.x、spring-beansをdtdファイルはclasspathディレクトリの下に置いて、DOCTYPEを
工事用がspring 2である場合.x、を外し、
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.0.xsd">
添付ファイルにはxfireのパッケージとspring-beansがあります.dtdファイル