2010-09-06 24 views
15

tôi có thể biên dịch và bắt đầu dự án Spring tôi sử dụng Maven:ngoại lệ áp dụng bắt đầu từ mùa xuân từ Java

mvn -e clean compile exec:java -Dexec.mainClass=de.fraunhofer.fkie.tet.vmware.manager.Test 

Tuy nhiên, khi tôi lắp ráp tất cả các lọ trong một tập tin duy nhất sử dụng maven-assembly-plugin (bao gồm applicationContext.xml), tôi luôn nhận được một Exception trong quá trình thực java:

java -cp target/test-jar-with-dependencies.jar:. de.fraunhofer.fkie.tet.vmware.manager.Test 

    INFO: Loading XML bean definitions from class path resource [applicationContext.xml] 
    Sep 6, 2010 10:37:21 AM org.springframework.util.xml.SimpleSaxErrorHandler warning 
    WARNING: Ignored XML validation warning 
    org.xml.sax.SAXParseException: schema_reference.4: Failed to read schema document 'http://www.springframework.org/schema/context/spring-context.xsd', because 1) could not find the document; 2) the document could not be read; 3) the root element of the document is not <xsd:schema>. 
    ... 
    Exception in thread "main" org.springframework.beans.factory.xml.XmlBeanDefinitionStoreException: 
    Line 10 in XML document from class path resource [applicationContext.xml] is invalid; nested exception is org.xml.sax.SAXParseException: cvc-complex-type.2.4.c: 
    The matching wildcard is strict, but no declaration can be found for element 'context:annotation-config'. 
    ... 
    Caused by: org.xml.sax.SAXParseException: cvc-complex-type.2.4.c: 
    The matching wildcard is strict, but no declaration can be found for element 'context:annotation-config'. 

tôi cũng đã cố gắng để đính kèm các định nghĩa lược đồ, tức là spring-context.xsd vv trực tiếp vào classpath, nhưng không có bất kỳ thành công.

less src/main/resources/applicationContext.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:context="http://www.springframework.org/schema/context" 
     xsi:schemaLocation="http://www.springframework.org/schema/beans 
          http://www.springframework.org/schema/beans/spring-beans.xsd 
          http://www.springframework.org/schema/context 
          http://www.springframework.org/schema/context/spring-context.xsd"> 

     <context:annotation-config /> <!-- wegen '@PostConstruct' --> 
    <!--<context:component-scan base-package="de.fraunhofer" />  --> 
    ... 
    </beans> 
+0

Bạn có thể đăng ứng dụng của mìnhContext.xml - hoặc ít nhất là phần tiêu đề. Tôi nghi ngờ rằng có vấn đề với tiêu đề của bạn/tham chiếu dtd, v.v. –

+0

'applicationContext.xml' được đăng ở trên. Thật ngạc nhiên, ứng dụng chạy mà không có bất kỳ vấn đề gì, nếu 'mvn exec: java' được sử dụng để khởi động nó. – rmv

Trả lời

19

xử lý namespace mùa xuân được giải quyết bằng các file /META-INF/spring.schemas/META-INF/spring.handlers. Bởi vì các tệp có các tên này tồn tại trong các lọ khác nhau của Spring, có lẽ chỉ một trong số chúng nằm trong jar mục tiêu sau maven-assembly-plugin.

Có lẽ bạn có thể hợp nhất các tệp này theo cách thủ công và bằng cách nào đó định cấu hình maven-assembly-plugin để ghi đè tệp trong jar mục tiêu bằng tệp được hợp nhất này.

+2

Vâng, bạn đã đúng, đúng vậy! Các tệp '/META-INF/spring.handlers' độc lập từ các lọ khác nhau bị mất trong bình cuối cùng. Đối mặt với điều này, tôi quyết định không sử dụng 'maven-assembly-plugin' cho bây giờ, nhưng bao gồm tất cả các lọ thủ công từ thư mục 'target/lib /' (sau 'mvn install'), ví dụ: 'java -cp target/lib/spring-aop-3.0.4.RELEASE.jar: target/lib/spring-asm-3.0.4.RELEASE.jar: [...]: target/classes de.fraunhofer.fkie .tet.vmware.manager.Test '. Điều này hoạt động như mong đợi. Cảm ơn nhiều! ;-) – rmv

+3

@rmv Hoặc bạn có thể cho phép plugin phụ thuộc maven làm bản sao cho bạn, như trong [here] (http://stackoverflow.com/questions/574594/how-can-i-create-an- thực thi-jar-với-phụ thuộc-sử dụng-maven/4323501 # 4323501) – staromeste

4

Tôi nghi ngờ tệp cấu hình mùa xuân của bạn thiếu không gian tên XML context. Nó sẽ được thêm vào phần tử gốc của tệp cấu hình mùa xuân của bạn như sau:

<?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:context="http://www.springframework.org/schema/context" 
    xsi:schemaLocation="http://www.springframework.org/schema/beans 
      http://www.springframework.org/schema/beans/spring-beans-3.0.xsd 
      http://www.springframework.org/schema/context 
      http://www.springframework.org/schema/context/spring-context-3.0.xsd"> 

    <context:annotation-config /> 
    <context:component-scan base-package="com.abc.xyz" /> 

</beans> 
+0

Cảm ơn câu trả lời nhanh chóng! Tôi đã không đăng tập tin applicationContext.xml của tôi, bởi vì 'mvn exec: java -Dexec.mainClass = de.fraunhofer.fkie.tet.vmware.manager.Test ' hoạt động tốt. Vì vậy, tôi nghĩ rằng không có gì sai với các tập tin cấu hình trong chính, nó thực sự chứa tất cả các yếu tố từ ví dụ của bạn ở trên. Vấn đề xảy ra, khi tôi cố gắng để bắt đầu phiên bản lắp ráp trực tiếp từ Java. – rmv

0

Bạn có phụ thuộc vào mùa xuân nào trong pom? Bạn có thể gặp lỗi phân tích cú pháp xml do một số tệp jar mùa xuân không nằm trên đường dẫn lớp. Vào mùa xuân 3 thư viện được chia thành nhiều tập tin jar. Kiểm tra this post để xem những gì bạn cần, cụ thể:

<dependency> 
    <groupId>org.springframework</groupId> 
    <artifactId>spring-context</artifactId> 
    <version>${org.springframework.version}</version> 
</dependency> 
+0

Cảm ơn gợi ý, nhưng 'spring-context.jar' đã được tập hợp trong 'target/test-jar-with-dependencies.jar', tức là jar cuối cùng chứa 'org/springframework/context/config/spring-context- 3.0.xsd '. Nhân tiện: chúng tôi được kết nối với internet thông qua một máy chủ proxy. Có thể, Maven sử dụng một số cài đặt proxy toàn hệ thống, trong khi Java không thể kết nối và kiểm tra tài liệu '.xsd' từ web? – rmv

+0

Cập nhật: nó không có gì để làm với các vấn đề proxy như tôi xác minh bởi một chạy thử nghiệm ở nhà trực tiếp kết nối với internet. – rmv

3

Tôi đã tìm thấy vấn đề gốc cho vấn đề này theo câu trả lời của axtavt và tôi đã báo cáo lỗi đó là lỗi? trong Spring: https://jira.springsource.org/browse/SPR-8368 - giải pháp để tạo các bản sao được hợp nhất của riêng bạn của các tệp này được bao gồm ở đó. Cho hậu thế mã là ở đây cũng như:

//IOUtils and FileUtils come from Apache Commons IO 
for(String s : new String[] {"spring.schemas", "spring.handlers", "spring.tooling"}) { 
    Enumeration<?> e = Test.class.getClassLoader().getResources("META-INF/"+s); 
    StringBuilder out = new StringBuilder(); 
    while(e.hasMoreElements()) { 
     URL u = (URL) e.nextElement(); 
     out.append(IOUtils.toString(u.openStream())).append("\n"); 
    } 
    File outf = new File(s); 
    FileUtils.writeStringToFile(outf, out.toString(), "UTF-8"); 
} 
1

Tôi tin rằng có 3 giải pháp cho vấn đề này

  1. Các file jar tx nên được bao gồm trong classpath/buildpath của dự án. (lỗi phổ biến nhất)
  2. Được đề cập bởi "axtavt" ở trên
  3. Hãy thử điều này trước khi giải pháp "axtaxt": vào thư mục chiến tranh của bạn (được chỉ định trong tab nâng cao của GWT) và đặt tệp spring-tx.jar trong lib trong thư mục chiến tranh của bạn, làm mới và chạy lại.
0

Vì nó cho thấy có vấn đề với việc phân tích cú pháp trong Yêu cầu hoặc trong phản hồi. Lỗi này có thể xảy ra nếu máy khách RestTemplate đang mong đợi loại Phản hồi cụ thể từ Tài nguyên, nhưng Tài nguyên đang trả về một cái gì đó hoàn toàn. Tôi nhận được lỗi này cho một khách hàng POST RestTemplate có liên quan đến thay đổi trong phản hồi trả lại.

Ví dụ:RestTemplate ban đầu đã được trả lại một Entity 'MyClass' thay đổi và nhìn chằm chằm trở Chuỗi nên Parser bắt đầu đưa ra lỗi

ResponseEntity<MyClass> postResponseEntity = restTemplate.postForEntity(postEndPoint, httpRequestEntity, MyClass.class); 
MyClass postResponseBody = postResponseEntity.getBody(); 

Thay đổi để

ResponseEntity<String> postResponseEntity = restTemplate.postForEntity(postEndPoint, httpRequestEntity, String.class); 
String postResponseBody = postResponseEntity.getBody(); 

Như kiểu phản ứng thay đổi từ các tổ chức để String phân tích cú pháp bắt đầu đưa ra lỗi khi xử lý Phản hồi. Đã thay đổi nó thành đúng Loại phản hồi (trong trường hợp của tôi là String) và nó bắt đầu hoạt động.

Các vấn đề liên quan