2015-12-17 9 views
5

मैं जावा वेब सेवा पर एक अन्य जावा प्रोजेक्ट के आधार पर मेवेन के साथ काम कर रहा हूं। मैं वेब सेवा प्रोजेक्ट (प्रोजेक्ट 2), और निर्भर परियोजना (परियोजना 1)त्रुटि "java.lang.No.SuchFieldError: WRITE_DURATIONS_AS_TIMESTAMPS"

पर कॉल करूंगा, इसलिए मेरे पास "com.fasterxml.jackson.datatype.joda.JodaModule" jar का उपयोग करके इस प्रोजेक्ट में "प्रोजेक्ट 1" है। "प्रोजेक्ट 1" में यह निर्भरताएं हैं।

<dependencies> 
    <dependency> 
     <groupId>com.google.guava</groupId> 
     <artifactId>guava</artifactId> 
     <version>19.0-rc2</version> 
    </dependency> 
    <dependency> 
     <groupId>commons-lang</groupId> 
     <artifactId>commons-lang</artifactId> 
     <version>2.6</version> 
    </dependency> 
    <dependency> 
     <groupId>org.slf4j</groupId> 
     <artifactId>slf4j-api</artifactId> 
     <version>1.7.12</version> 
    </dependency> 
    <dependency> 
     <groupId>joda-time</groupId> 
     <artifactId>joda-time</artifactId> 
     <version>2.8.2</version> 
    </dependency> 
    <dependency> 
     <groupId>org.apache.httpcomponents</groupId> 
     <artifactId>httpclient</artifactId> 
     <version>4.5.1</version> 
    </dependency> 
    <dependency> 
     <groupId>com.fasterxml.jackson.core</groupId> 
     <artifactId>jackson-core</artifactId> 
     <version>2.6.2</version> 
    </dependency> 
    <dependency> 
     <groupId>com.fasterxml.jackson.core</groupId> 
     <artifactId>jackson-annotations</artifactId> 
     <version>2.6.2</version> 
    </dependency> 
    <dependency> 
     <groupId>com.fasterxml.jackson.core</groupId> 
     <artifactId>jackson-databind</artifactId> 
     <version>2.6.2</version> 
    </dependency> 
    <dependency> 
     <groupId>com.fasterxml.jackson.datatype</groupId> 
     <artifactId>jackson-datatype-joda</artifactId> 
     <version>2.6.2</version> 
    </dependency> 
    <dependency> 
     <groupId>com.google.code.findbugs</groupId> 
     <artifactId>jsr305</artifactId> 
     <version>3.0.0</version> 
     <scope>provided</scope> 
    </dependency> 
    <dependency> 
     <groupId>junit</groupId> 
     <artifactId>junit</artifactId> 
     <version>4.12</version> 
     <scope>test</scope> 
    </dependency> 
    <dependency> 
     <groupId>org.powermock</groupId> 
     <artifactId>powermock-module-junit4</artifactId> 
     <version>${powermock.version}</version> 
     <scope>test</scope> 
    </dependency> 
    <dependency> 
     <groupId>org.powermock</groupId> 
     <artifactId>powermock-api-mockito</artifactId> 
     <version>${powermock.version}</version> 
     <scope>test</scope> 
    </dependency> 
    <dependency> 
     <groupId>org.skyscreamer</groupId> 
     <artifactId>jsonassert</artifactId> 
     <version>1.2.3</version> 
     <scope>test</scope> 
    </dependency> 
    <dependency> 
     <groupId>com.yammer.dropwizard</groupId> 
     <artifactId>dropwizard-testing</artifactId> 
     <version>0.6.2</version> 
     <scope>test</scope> 
    </dependency> 
</dependencies> 

अब मुझे "प्रोजेक्ट 2" में "प्रोजेक्ट 1" का उपयोग करने की आवश्यकता है। तो मैं इस कोड को

@Override 
protected void doPost(HttpServletRequest request, HttpServletResponse response) 
    throws ServletException, IOException { 

    ObjectMapper mapper = new ObjectMapper(); 
    mapper.setDateFormat(new ISO8601DateFormat()); 
    mapper.setSerializationInclusion(JsonInclude.Include.ALWAYS); 
    JodaModule module = new JodaModule(); 
    mapper.registerModule(module); 

} 

लेकिन जब मैं ग्राहक से पोस्ट को कॉल करता हूं। यह मुझे यह त्रुटि देता है।

Warning: StandardWrapperValve[Recieve]: Servlet.service() for servlet Recieve threw exception 
java.lang.NoSuchFieldError: WRITE_DURATIONS_AS_TIMESTAMPS 
    at com.fasterxml.jackson.datatype.joda.ser.DurationSerializer.<init>(DurationSerializer.java:28) 
    at com.fasterxml.jackson.datatype.joda.ser.DurationSerializer.<init>(DurationSerializer.java:25) 
    at com.fasterxml.jackson.datatype.joda.JodaModule.<init>(JodaModule.java:45) 
    at Recieve.doPost(Recieve.java:82) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:707) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:790) 
    at org.apache.catalina.core.StandardWrapper.service(StandardWrapper.java:1682) 
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:318) 
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:160) 
    at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:734) 
    at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:673) 
    at com.sun.enterprise.web.WebPipeline.invoke(WebPipeline.java:99) 
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:174) 
    at org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:415) 
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:282) 
    at com.sun.enterprise.v3.services.impl.ContainerMapper$HttpHandlerCallable.call(ContainerMapper.java:459) 
    at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:167) 
    at org.glassfish.grizzly.http.server.HttpHandler.runService(HttpHandler.java:201) 
    at org.glassfish.grizzly.http.server.HttpHandler.doHandle(HttpHandler.java:175) 
    at org.glassfish.grizzly.http.server.HttpServerFilter.handleRead(HttpServerFilter.java:235) 
    at org.glassfish.grizzly.filterchain.ExecutorResolver$9.execute(ExecutorResolver.java:119) 
    at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeFilter(DefaultFilterChain.java:284) 
    at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeChainPart(DefaultFilterChain.java:201) 
    at org.glassfish.grizzly.filterchain.DefaultFilterChain.execute(DefaultFilterChain.java:133) 
    at org.glassfish.grizzly.filterchain.DefaultFilterChain.process(DefaultFilterChain.java:112) 
    at org.glassfish.grizzly.ProcessorExecutor.execute(ProcessorExecutor.java:77) 
    at org.glassfish.grizzly.nio.transport.TCPNIOTransport.fireIOEvent(TCPNIOTransport.java:561) 
    at org.glassfish.grizzly.strategies.AbstractIOStrategy.fireIOEvent(AbstractIOStrategy.java:112) 
    at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.run0(WorkerThreadIOStrategy.java:117) 
    at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.access$100(WorkerThreadIOStrategy.java:56) 
    at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy$WorkerThreadRunnable.run(WorkerThreadIOStrategy.java:137) 
    at org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:565) 
    at org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.run(AbstractThreadPool.java:545) 
    at java.lang.Thread.run(Thread.java:745) 

नोट: मैं, यह Maven जावा परियोजना में काम कर रहा है Maven जावा परियोजना नहीं Maven वेब जावा परियोजना में एक ही कोड का प्रयास करें।

public class test { 

public static void main(String[] args) { 
    ObjectMapper mapper = new ObjectMapper(); 
    mapper.setDateFormat(new ISO8601DateFormat()); 
    mapper.setSerializationInclusion(JsonInclude.Include.ALWAYS); 
    JodaModule module = new JodaModule(); 
    mapper.registerModule(module); 
    } 
} 

संपादित करें 1:

मैं glassfish 4.1 पर काम कर रहा था और जब मैं बिल्ला करने के लिए सर्वर को बदलने यह काम करता है। तो मुझे लगता है कि ग्लासफ़िश में एक संघर्ष जार है। लेकिन अब तक मुझे नहीं पता कि मैं इस संघर्ष को कैसे हल कर सकता हूं।

उत्तर

1

यह एक निर्भरता संघर्ष की तरह दिखता है। सुनिश्चित करें कि दोनों परियोजनाएं एक ही जोडा-टाइम (और इसकी निर्भरता) संस्करणों को लोड करती हैं।

आप कमांड लाइन में mvn dependency:tree चला कर या जब ग्रहण में पोम संपादक के साथ pom.xml खोलने निर्भरता पदानुक्रम पैनल पर एक नज़र होने से निर्भरता पेड़ पर एक नज़र हो सकता है।

+0

यह तय करने के लिए जैक्सन पर जर्सी निर्भरताओं की तलाश करना उचित है – MonoThreaded

11

यह जैक्सन libs और joda के बीच एक निर्भरता विसंगति के कारण होता है। यह केवल मूल मेवेन मॉड्यूल का उपयोग करते समय आपके लिए काम कर रहा है क्योंकि यह सभी जैक्सन libs को 2.6.2 के रूप में घोषित करता है, जो सही है। आपका समावेशी वेबपैप निश्चित रूप से प्रत्यक्ष या संक्रमणीय निर्भरता के रूप में कुछ अन्य जैक्सन संस्करण का उपयोग करता है। इससे आपके क्लासपाथ पर असंगत जार होते हैं।

सत्यापित करने के लिए: बस अपना वेब-आईएनएफ/lib जांचें और जैकसन से संबंधित सभी libs देखें। आपको गैर 2.6.2 संस्करण वाले मिलेगा।

को ठीक करने के लिए: आपको यह तय करने की आवश्यकता है कि क्या आप अपने वेबपैड पर एक नए संस्करण में अपग्रेड कर सकते हैं। फिर तदनुसार अपने मैवेन निर्भरताओं को कॉन्फ़िगर करें।

+0

मुझे लगता है कि यह समस्या है। कृपया प्रश्न में संपादन की जांच करें। – user1927468

+0

इस उत्तर के अनुसार: http://stackoverflow.com/a/7398607/821786 आप अपने libs को प्राथमिकता देने के लिए ग्लासफ़िश क्लास-लोडर को निर्देश दे सकते हैं। –

+0

जैकसन 2.3। * से 2.8 तक अपग्रेड करने के बाद मेवेन प्लगइन "युद्ध: इनस्थल" का उपयोग करते समय मुझे यह समस्या थी। * दोनों जार वेब-आईएनएफ/lib निर्देशिका में थे। मुझे पुराने निर्भरता को मैन्युअल रूप से हटा देना पड़ा। –

संबंधित मुद्दे