2013-11-20 38 views
1

我想對我的操作類Employee1進行驗證。我使用了文件Employee1-validation.xml。我得到這樣一個例外:無法在struts2框架中加載驗證xml文件

18:19:56,795 ERROR AnnotationActionValidatorManager:38 - Caught exception while loading file com/struts2examples/Employee1-validation.xml 
Connection refused: connect - [unknown location] 
    at com.opensymphony.xwork2.util.DomHelper.parse(DomHelper.java:119) 
    at com.opensymphony.xwork2.validator.DefaultValidatorFileParser.parseActionValidatorConfigs(DefaultValidatorFileParser.java:82) 
    at com.opensymphony.xwork2.validator.AnnotationActionValidatorManager.loadFile(AnnotationActionValidatorManager.java:394) 
    at com.opensymphony.xwork2.validator.AnnotationActionValidatorManager.buildClassValidatorConfigs(AnnotationActionValidatorManager.java:279) 
    at com.opensymphony.xwork2.validator.AnnotationActionValidatorManager.buildValidatorConfigs(AnnotationActionValidatorManager.java:371) 
    at com.opensymphony.xwork2.validator.AnnotationActionValidatorManager.getValidators(AnnotationActionValidatorManager.java:99) 
    at com.opensymphony.xwork2.validator.AnnotationActionValidatorManager.validate(AnnotationActionValidatorManager.java:141) 
    at com.opensymphony.xwork2.validator.AnnotationActionValidatorManager.validate(AnnotationActionValidatorManager.java:133) 
    at com.opensymphony.xwork2.validator.AnnotationActionValidatorManager.validate(AnnotationActionValidatorManager.java:128) 
    at com.opensymphony.xwork2.validator.ValidationInterceptor.doBeforeInvocation(ValidationInterceptor.java:222) 
    at com.opensymphony.xwork2.validator.ValidationInterceptor.doIntercept(ValidationInterceptor.java:263) 
    at org.apache.struts2.interceptor.validation.AnnotationValidationInterceptor.doIntercept(AnnotationValidationInterceptor.java:68) 
    at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98) 
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246) 
    at com.opensymphony.xwork2.interceptor.ConversionErrorInterceptor.intercept(ConversionErrorInterceptor.java:138) 
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246) 
    at com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:239) 
    at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98) 
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246) 
    at com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:239) 
    at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98) 
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246) 
    at com.opensymphony.xwork2.interceptor.StaticParametersInterceptor.intercept(StaticParametersInterceptor.java:191) 
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246) 
    at org.apache.struts2.interceptor.MultiselectInterceptor.intercept(MultiselectInterceptor.java:73) 
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246) 
    at org.apache.struts2.interceptor.CheckboxInterceptor.intercept(CheckboxInterceptor.java:91) 
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246) 
    at org.apache.struts2.interceptor.FileUploadInterceptor.intercept(FileUploadInterceptor.java:252) 
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246) 
    at com.opensymphony.xwork2.interceptor.ModelDrivenInterceptor.intercept(ModelDrivenInterceptor.java:100) 
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246) 
    at com.opensymphony.xwork2.interceptor.ScopedModelDrivenInterceptor.intercept(ScopedModelDrivenInterceptor.java:141) 
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246) 
    at com.opensymphony.xwork2.interceptor.ChainingInterceptor.intercept(ChainingInterceptor.java:145) 
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246) 
    at com.opensymphony.xwork2.interceptor.PrepareInterceptor.doIntercept(PrepareInterceptor.java:171) 
    at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98) 
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246) 
    at com.opensymphony.xwork2.interceptor.I18nInterceptor.intercept(I18nInterceptor.java:161) 
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246) 
    at org.apache.struts2.interceptor.ServletConfigInterceptor.intercept(ServletConfigInterceptor.java:164) 
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246) 
    at com.opensymphony.xwork2.interceptor.AliasInterceptor.intercept(AliasInterceptor.java:193) 
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246) 
    at com.opensymphony.xwork2.interceptor.ExceptionMappingInterceptor.intercept(ExceptionMappingInterceptor.java:189) 
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246) 
    at org.apache.struts2.impl.StrutsActionProxy.execute(StrutsActionProxy.java:54) 
    at org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:563) 
    at org.apache.struts2.dispatcher.FilterDispatcher.doFilter(FilterDispatcher.java:434) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) 
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:225) 
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123) 
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472) 
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:168) 
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:98) 
    at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:927) 
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118) 
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407) 
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1001) 
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:585) 
    at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:312) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603) 
    at java.lang.Thread.run(Thread.java:722) 
Caused by: java.net.ConnectException: Connection refused: connect 
    at java.net.DualStackPlainSocketImpl.connect0(Native Method) 
    at java.net.DualStackPlainSocketImpl.socketConnect(DualStackPlainSocketImpl.java:69) 
    at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:339) 
    at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:200) 
    at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:182) 
    at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:157) 
    at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:391) 
    at java.net.Socket.connect(Socket.java:579) 
    at java.net.Socket.connect(Socket.java:528) 
    at sun.net.NetworkClient.doConnect(NetworkClient.java:180) 
    at sun.net.www.http.HttpClient.openServer(HttpClient.java:378) 
    at sun.net.www.http.HttpClient.openServer(HttpClient.java:473) 
    at sun.net.www.http.HttpClient.<init>(HttpClient.java:203) 
    at sun.net.www.http.HttpClient.New(HttpClient.java:290) 
    at sun.net.www.http.HttpClient.New(HttpClient.java:306) 
    at sun.net.www.protocol.http.HttpURLConnection.getNewHttpClient(HttpURLConnection.java:995) 
    at sun.net.www.protocol.http.HttpURLConnection.plainConnect(HttpURLConnection.java:931) 
    at sun.net.www.protocol.http.HttpURLConnection.connect(HttpURLConnection.java:849) 
    at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1299) 
    at com.sun.org.apache.xerces.internal.impl.XMLEntityManager.setupCurrentEntity(XMLEntityManager.java:632) 
    at com.sun.org.apache.xerces.internal.impl.XMLEntityManager.startEntity(XMLEntityManager.java:1270) 
    at com.sun.org.apache.xerces.internal.impl.XMLEntityManager.startDTDEntity(XMLEntityManager.java:1237) 
    at com.sun.org.apache.xerces.internal.impl.XMLDTDScannerImpl.setInputSource(XMLDTDScannerImpl.java:260) 
    at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl$DTDDriver.dispatch(XMLDocumentScannerImpl.java:1153) 
    at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl$DTDDriver.next(XMLDocumentScannerImpl.java:1049) 
    at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl$PrologDriver.next(XMLDocumentScannerImpl.java:962) 
    at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(XMLDocumentScannerImpl.java:607) 
    at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.next(XMLNSDocumentScannerImpl.java:116) 
    at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:489) 
    at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:835) 
    at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:764) 
    at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:123) 
    at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1210) 
    at com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(SAXParserImpl.java:568) 
    at com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl.parse(SAXParserImpl.java:302) 
    at com.opensymphony.xwork2.util.DomHelper.parse(DomHelper.java:117) 
    ... 65 more 

這是我的empinfo1.jsp頁:

<%@ page language="java" contentType="text/html; charset=ISO-8859-1" 
    pageEncoding="ISO-8859-1"%> 
<%@ taglib prefix="s" uri="/struts-tags"%> 
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" 
"http://www.w3.org/TR/html4/loose.dtd"> 
<html> 
<head> 
<title>Employee Form</title> 
</head> 

<body> 
    <s:form action="empinfo1" method="post"> 
     <s:textfield name="name" label="Name" size="20" /> 
     <s:textfield name="age" label="Age" size="20" /> 
     <s:submit name="submit" label="Submit" align="center" /> 
    </s:form> 
</body> 
</html> 

我使用的struts.xml的文件是:

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE struts PUBLIC 
    "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" 
    "http://struts.apache.org/dtds/struts-2.0.dtd"> 
<struts> 
    <constant name="struts.devMode" value="true" /> 
    <constant name="struts.multipart.maxSize" value="1000000" /> 

    <package name="helloworld" extends="struts-default"> 

     <interceptors> 
     <interceptor name="myinterceptor" 
      class="com.struts2examples.MyInterceptor" /> 
     <interceptor name="myinterceptor1" 
      class="com.struts2examples.MyInterceptor1" /> 

     </interceptors> 

     <action name="hello" 
      class="com.struts2examples.HelloWorldAction" 
      method="execute"> 
      <interceptor-ref name="defaultStack" /> 
      <interceptor-ref name="params"/> 
      <interceptor-ref name="myinterceptor"/> 
      <interceptor-ref name="myinterceptor1"/> 
      <result name="success">/HelloWorld.jsp</result> 
      <result name="error">/AccessDenied.jsp</result> 

     </action> 

     <action name="hello1" 
      class="com.struts2examples.HelloWorldAction1" 
      method="execute"> 
      <interceptor-ref name="defaultStack" /> 
      <interceptor-ref name="timer"/> 

      <result name="success" type="freemarker"> 
       <param name="location">/hello.fm</param> 
      </result> 
      <result name="nopassnofail" type="redirect"> 
       <param name="location">/NewWorld.jsp</param > 
      </result> 
      <result name="error">/AccessDenied.jsp</result> 
     </action> 

     <action name="upload" class="com.struts2examples.UploadFile" method="execute"> 
     <interceptor-ref name="defaultStack" /> 
     <interceptor-ref name="fileUpload"> 
      <param name="allowedTypes">image/jpeg,image/gif</param> 
     </interceptor-ref> 

     <result name="success">/success.jsp</result> 
     <result name="error">/error.jsp</result> 
     </action> 

     <action name="loginaction" class="com.struts2examples.LoginAction" 
     method="execute"> 
     <result name="success">/successLogin.jsp</result> 
     <result name="error">/errorLogin.jsp</result> 
     </action> 

     <action name="emailer" 
     class="com.struts2examples.Emailer" 
     method="execute"> 
     <result name="success">/successMail.jsp</result> 
     <result name="error">/errorMail.jsp</result> 
     </action> 

     <action name="empinfo" 
     class="com.struts2examples.Employee" 
     method="execute"> 
     <result name="input">/empinfo.jsp</result> 
     <result name="success">/successEmpInfo.jsp</result> 
     </action> 

     <action name="empinfo1" 
     class="com.struts2examples.Employee1" 
     method="execute"> 
     <result name="input">/empinfo1.jsp</result> 
     <result name="success">/successEmpInfo.jsp</result> 
     </action> 
    </package> 
</struts> 

在工程工作看起來像:

Project workspace

的Employee1.java樣子:

<!DOCTYPE validators PUBLIC 
"-//OpenSymphony Group//XWork Validator 1.0.2//EN" 
"http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd"> 

<validators> 
    <field name="name"> 
     <field-validator type="required"> 
     <message> 
      The name is required. 
     </message> 
     </field-validator> 
    </field> 

    <field name="age"> 
    <field-validator type="int"> 
     <param name="min">29</param> 
     <param name="max">64</param> 
     <message> 
      Age must be in between 28 and 65 
     </message> 
     </field-validator> 
    </field> 
</validators> 

我收到這條線警告:

package com.struts2examples; 

import com.opensymphony.xwork2.ActionSupport; 

public class Employee1 extends ActionSupport{ 
    private String name; 
    private int age; 

    public String execute() 
    { 
     return SUCCESS; 
    } 
    public String getName() { 
     return name; 
    } 
    public void setName(String name) { 
     this.name = name; 
    } 
    public int getAge() { 
     return age; 
    } 
    public void setAge(int age) { 
     this.age = age; 
    } 
} 

的Employee1-validation.xml文件在同一package.It描述如下:

"http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd"> 

的文件不能被驗證爲XML定義「http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd」,也就是指定 作爲描述SY無法找到文件的ntax。

+0

'連接被拒絕:連接'??? –

+0

在本地運行? – subash

+0

授予java連接的權限 –

回答

6

我更換

<!DOCTYPE validators PUBLIC 
"-//OpenSymphony Group//XWork Validator 1.0.2//EN" 
"http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd"> 

有:

<!DOCTYPE validators PUBLIC "-//Apache Struts//XWork Validator 1.0.3//EN" 
     "http://struts.apache.org/dtds/xwork-validator-1.0.3.dtd"> 

而現在它的正常工作。感謝所有參與這個問題的人。

+1

很酷。是的,如果你使用了錯誤的DTD,例如不在jar中的東西,它會嘗試去找到它。 –

2

確保您的文件在類path.Its文件加載問題。

Struts2在定義驗證xml文件時定義了特定的命名約定。

格式爲ActionClassName-validation.xml。因此,對於您的應用程序文件是Employee1-validation.xml,並且struts名稱應該是Employee1。

請注意,該文件應與動作類存在於相同的包中。

+0

一切都很到位。它仍然不起作用。 – anon