spring-core的jackson数据绑定问题



我正在尝试为我的oauth rest模板创建一个application/json转换器:

List<HttpMessageConverter<?>> messageConverters = new ArrayList<HttpMessageConverter<?>>();
MappingJackson2HttpMessageConverter jackson = new MappingJackson2HttpMessageConverter();
List<MediaType> mediaTypes = new ArrayList<MediaType>();
mediaTypes.add(MediaType.APPLICATION_JSON);
jackson.setSupportedMediaTypes(mediaTypes);
messageConverters.add(jackson);
ProcessServiceVisitType request = TransformationHelper.createProcessServiceVisit(singleRepairOrder);
MultiValueMap<String, String> headers =  new LinkedMultiValueMap<String, String>();
headers.add("Content-Type", "application/xml");
HttpEntity<ProcessServiceVisitType> entity = new HttpEntity<>(request);
restTemplate.exchange(URL, org.springframework.http.HttpMethod.POST, entity, AcknowledgeServiceVisitType.class);

然而,我得到了这个缺失的类问题:

java.lang.NoClassDefFoundError: com/fasterxml/jackson/databind/ObjectMapper
at org.springframework.http.converter.json.AbstractJackson2HttpMessageConverter.<clinit>(AbstractJackson2HttpMessageConverter.java:62)
at com.xx.as.sle.xx.utility.SendToUtil.sendTo(SendToUtil.java:72)
at com.xx.as.sle.xx.servlet.resource.OrderResource.sendTo(OrderResource.java:137)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
Truncated. see log file for complete stacktrace
Caused By: java.lang.ClassNotFoundException: com.fasterxml.jackson.databind.ObjectMapper

为了解决这个问题,我尝试在pom.xml中添加和更新依赖项,比如将我的spring.version-4.1.4更改为4.3.5,甚至添加jackson databind 2.7.0。然而,无论我如何更新我的pom,每当我尝试添加jackson/databind:时,我都会收到这个错误

org.springframework.http.converter.HttpMessageConversionException: Could not instantiate JAXBContext for class [class org.star._564.starstandard.star._5.ProcessServiceVisitType]: 
Exception Description: Invalid XmlElementRef on property rest on class org.star._564.starstandard.star._5.IndividualApplicantPersonNameType. Referenced Element not declared.; nested exception is javax.xml.bind.JAXBException: 
Exception Description: Invalid XmlElementRef on property rest on class org.star._564.starstandard.star._5.IndividualApplicantPersonNameType. Referenced Element not declared.
- with linked exception:
[Exception [EclipseLink-50006] (Eclipse Persistence Services - 2.5.2.v20140319-9ad6abd): org.eclipse.persistence.exceptions.JAXBException
Exception Description: Invalid XmlElementRef on property rest on class org.star._564.starstandard.star._5.IndividualApplicantPersonNameType. Referenced Element not declared.]
at org.springframework.http.converter.xml.AbstractJaxb2HttpMessageConverter.getJaxbContext(AbstractJaxb2HttpMessageConverter.java:116)
at org.springframework.http.converter.xml.AbstractJaxb2HttpMessageConverter.createMarshaller(AbstractJaxb2HttpMessageConverter.java:50)

有人能帮我解决这个问题并理解这个问题的含义吗?我正在使用Intellij并运行Oracle Weblogic 12c。我不知道为什么会出现Eclipse错误。我尝试添加spring-core依赖项,但仍然出现错误。

这是我的pom.xml:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.xx.gbrd</groupId>
<artifactId>Util_12345__Simulator</artifactId>
<packaging>war</packaging>
<name>Util_12345 -  Simulator</name>
<version>1.0.0.0-SNAPSHOT</version>
<properties>
<javax.inject.version>1</javax.inject.version>
<m2eclipse.wtp.contextRoot>/simulator</m2eclipse.wtp.contextRoot>
<spring.version>4.3.5.RELEASE</spring.version>
<spring.ws.version>2.2.0.RELEASE</spring.ws.version>
<maven.compiler.version>3.1</maven.compiler.version>
<slf4j.version>1.7.7</slf4j.version>
<jersey.version>1.17.1</jersey.version> <!-- Later versions available, consider upgrading if weblogic will support 
it -->
<jersey.scope>compile</jersey.scope>    <!-- compile or provided, provided with glassfish, compile with tomcat & 
weblogic -->
<servlet.spec.version>2.5</servlet.spec.version>    <!-- May change based on weblogic version. This is for 10.3.6 -->
<mockito.version>1.9.5</mockito.version>
<build.scm.revision>${jenkins.build.scm.revision}</build.scm.revision>
<build.number>${jenkins.build.number}</build.number>
<build.id>${jenkins.build.id}</build.id>
<build.job.name>${jenkins.build.job.name}</build.job.name>
<timestamp>${maven.build.timestamp}</timestamp>
<maven.build.timestamp.format>yyyy-MM-dd HH:mm</maven.build.timestamp.format>
</properties>
<!--<parent> -->
<!--<groupId>com.xx.gbrd</groupId> -->
<!--<artifactId>asd_46679_Templates_WebService</artifactId> -->
<!--<version>3.8.0.6-SNAPSHOT</version> -->
<!--<relativePath>../templates/webservice/pom.xml</relativePath> -->
<!--</parent> -->
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>${spring.version}</version>
<exclusions>
<exclusion>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
<dependency>
<groupId>org.springframework.security.oauth</groupId>
<artifactId>spring-security-oauth2</artifactId>
<version>2.2.1.RELEASE</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.7.0</version>
</dependency>
<dependency>
<groupId>com.xx.gbrd</groupId>
<artifactId>asd_46679_SEE_STARBOD</artifactId>
<version>2.0.0.21</version>
</dependency>
<dependency>
<groupId>org.springframework.ws</groupId>
<artifactId>spring-ws-core</artifactId>
<version>${spring.ws.version}</version>
<exclusions>
<exclusion>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
</exclusion>
<exclusion>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
</exclusion>
<exclusion>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
</exclusion>
<exclusion>
<groupId>org.springframework</groupId>
<artifactId>spring-aop</artifactId>
</exclusion>
<exclusion>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
</exclusion>
<exclusion>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.springframework.ws</groupId>
<artifactId>spring-ws-security</artifactId>
<version>${spring.ws.version}</version>
<exclusions>
<exclusion>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
</exclusion>
<exclusion>
<groupId>org.springframework</groupId>
<artifactId>spring-aop</artifactId>
</exclusion>
<exclusion>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
</exclusion>
<exclusion>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
</exclusion>
<exclusion>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
</exclusion>
<exclusion>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
</exclusion>
<exclusion>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>${spring.version}</version>
<exclusions>
<exclusion>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>javax.inject</groupId>
<artifactId>javax.inject</artifactId>
<version>${javax.inject.version}</version>
</dependency>
<!-- Jersey JAX-RS (Provided by GlassFish) -->
<!-- CDDL 1.1 and GPL 2 with CPE -->
<dependency>
<groupId>com.sun.jersey</groupId>
<artifactId>jersey-server</artifactId>
<version>${jersey.version}</version>
<scope>${jersey.scope}</scope>
</dependency>
<dependency>
<groupId>com.sun.jersey</groupId>
<artifactId>jersey-core</artifactId>
<version>${jersey.version}</version>
<scope>${jersey.scope}</scope>
</dependency>
<dependency>
<groupId>com.sun.jersey.contribs</groupId>
<!--<artifactId>jersey-spring</artifactId> -->
<artifactId>jersey-spring-cddl</artifactId>
<version>${jersey.version}</version>
<scope>${jersey.scope}</scope>
<exclusions>
<exclusion>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
</exclusion>
<exclusion>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
</exclusion>
<exclusion>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
</exclusion>
<exclusion>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
</exclusion>
<exclusion>
<groupId>org.springframework</groupId>
<artifactId>spring-aop</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>com.sun.jersey</groupId>
<artifactId>jersey-json</artifactId>
<version>${jersey.version}</version>
<scope>${jersey.scope}</scope>
</dependency>
<!-- ASM added here because it makes some of the Jersey stuff work properly -->
<dependency>
<groupId>asm</groupId>
<artifactId>asm</artifactId>
<version>3.3.1</version>
</dependency>
<!-- Servlet API -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>${servlet.spec.version}</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
<!-- ***** LOGGING ***** -->
<!-- slf4j (Simple Logging Fascade) -->
<!-- MIT License, compatible with Apache License v2.0 -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>${slf4j.version}</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>jcl-over-slf4j</artifactId>
<version>${slf4j.version}</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>log4j-over-slf4j</artifactId>
<version>${slf4j.version}</version>
</dependency>
<dependency>
<groupId>org.mockito</groupId>
<artifactId>mockito-all</artifactId>
<version>${mockito.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>1.4</version>
</dependency>
</dependencies>
<build>
<defaultGoal>clean install</defaultGoal>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<version>2.3</version>
<configuration>
<attachClasses>true</attachClasses>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>${maven.compiler.version}</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
<!--<compilerargument>-Djava.endorsed.dirs="${project.basedir}/endorsed"</compilerargument> -->
</configuration>
</plugin>
</plugins>
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
</resource>
</resources>
</build>
<profiles>
<profile>
<id>LOCAL</id>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
</profile>
<profile>
<id>DEVELOPMENT</id>
</profile>
<profile>
<id>QA_TEST</id>
</profile>
<profile>
<id>PRODUCTION</id>
</profile>
</profiles>
</project>

我认为您遇到这个问题是因为您的类路径中仍然有Moxy。默认情况下,Oracle weblogic使用Moxy进行序列化。

看看从Moxy到Jackson 的Weblogic 12.2.1.3

看看你是否能用杰克逊完全取代莫西。

最新更新