2016-01-22 18 views
9

मैं बिलाव 8. में एक सेवा की तैनाती के दौरान एक मुद्दा का सामना करना पड़ रहा हो रही है त्रुटि निम्नलिखित:हो रही है NoSuchMethodError: javax.servlet.ServletContext.getVirtualServerName()

Caused by: java.lang.NoSuchMethodError: javax.servlet.ServletContext.getVirtualServerName()Ljava/lang/String; at org.apache.tomcat.websocket.server.WsServerContainer.(WsServerContainer.java:149) at org.apache.tomcat.websocket.server.WsSci.init(WsSci.java:131) at org.apache.tomcat.websocket.server.WsSci.onStartup(WsSci.java:47) at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5244) at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150) ... 10 more

विधि getVirtualServerName सर्वलेट 3.1 में और निकालने के बाद शुरू की गई थी

Specification-Title: Java API for Servlets 
Specification-Version: 3.1 
Specification-Vendor: Sun Microsystems, Inc. 
Implementation-Title: javax.servlet 

कहते हैं कौन सा है कि इसके होने 3.1: MANIFEST.MF मेरी servlet-api जार से मैं निम्नलिखित विवरण मिला है। तो क्या इस त्रुटि के लिए कोई अन्य कारण है? कृपया

+0

क्या आप ग्रहण से भागते हैं? या ... कृपया हमें अपने पर्यावरण, एप्लिकेशन और सेटिंग्स के बारे में और जानें। – MrSimpleMind

+0

क्या आप निश्चित रूप से टॉमकैट 8 का उपयोग कर रहे हैं? आपकी पोस्ट को 'tomcat7' टैग किया गया है ... –

+0

@AndrewRegan क्षमा करें यह एक गलती थी। मैंने संपादित किया मैं टोमकैट 8 – Rehman

उत्तर

8

अपने सभी मेवेन (या समतुल्य) निर्भरताओं की जांच करें और सुनिश्चित करें कि आप - या संभवतः एक और निर्भरता - javax.servlet/servlet-api के पूर्व-3.1 संस्करण में नहीं खींच रहे हैं जो आपके टॉमकैट 8 में क्या हो रहा है यदि आपने मैन्युअल रूप से तैनात किया है, तो सुनिश्चित करें कि आपने किसी भी servlet-api JAR को मैन्युअल रूप से टोमकैट में कॉपी नहीं किया है।

देखें: https://stackoverflow.com/a/26232535/954442

+0

अपमानजनक निर्भरता का पता लगाएं जो एमवीएन निर्भरता के साथ मेवेन में सर्वलेट-एपीआई जार में ला रहा है: अपनी परियोजना की जड़ में कमांड लाइन से पेड़, सर्वलेट-एपीआई के लिए आउटपुट को इसकी सबसे अधिक संभावना 2 खोजें? संस्करण, इसे अपने पोम में निम्नलिखित के साथ निर्भरता से बाहर कर दें। { सर्वलेट-api javax.servlet } – user1412523

2

स्प्रिंग बूट बिल्ला 7 डिफ़ॉल्ट प्रति चलेंगे, तो आप अपने pom.xml में Maven निर्माण tomcat.version ओवरराइड करने के लिए किया है। बिल्ला 8.0.30

<properties> 
    <tomcat.version>8.0.30</tomcat.version> 
</properties> 

आपकी समस्या का समाधान करना चाहिए चलाने के लिए नीचे देखें।

2

हल जावा 8 के साथ मेरे मैक पर साइट से डाउनलोड किए गए टॉमकैट के साथ समस्या का सामना करना पड़ रहा था और अनजिप।

मेरी समस्या हल हो गई क्योंकि एक अतिरिक्त servlet-api.jar फ़ाइल जो उठाई जा रही थी। यह समर्थन द्वारा/-name सर्वलेट-api.jar आपके सिस्टम में यह खोजने के लिए से आ रहा था /Library/Java/Extensions/servlet-api.jar

आप sudo उपयोग कर सकते हैं

यह निकाला गया कहीं और ऊपर।

मैं के लिए intallation https://gist.github.com/ddanailov-nmdp/c97aba2ca926b9627f6b4f7174083a32

3

इस पीछा कर रहा था मैं IntelliJ को अद्यतन करने के बाद Maven साथ इंटेलीजे पर इस त्रुटि थी।

मैं मैवेन के साथ परीक्षण चला सकता हूं लेकिन मेरे आईडीई से नहीं।

मैंने ./idea और project.iml फ़ाइलों को हटाकर और प्रोजेक्ट को पुनः लोड करके समस्या हल की।

-1

यह निश्चित रूप से javax.servlet और टोमकैट के संस्करण के संस्करण के साथ कुछ करने के लिए है।

मेरे मामले में, जब मैं किसी संस्करण के साथ क्रम में javax.servlet निर्भरता घोषित करता हूं तो यह चला गया। इस तरह -

compile('javax.servlet:servlet-api') 
2

विधि getVirtualServerName सर्वलेट 3.1 में ServletContext में जोड़ा गया है।जावा दस्तावेज़ की विधि का पता लगाएं getVirtualServerName

इस समस्या को कम से कम 3 कारण हो सकते हैं:

  1. अपने सर्वलेट संस्करण 3.1 पुराना है।

  2. अन्य जार में 3.1 से सर्वलेट पुराना संस्करण है।

  3. अपने बिल्ला संस्करण से अधिक उम्र के 8

इसे हल करने के लिए, आप नीचे रास्ते की कोशिश कर सकते है।

I. अपने pom.xml की जांच करने के लिए नीचे दिए गए कोड हैं या नहीं।

<dependency> 
     <groupId>javax.servlet</groupId> 
     <artifactId>javax.servlet-api</artifactId> 
     <version>3.1.0</version> 
    </dependency> 

यदि आपके pom.xml में उपरोक्त कोड है, तो भी यह समस्या होगी। आप दूसरा रास्ता कर सकते हैं।

II। अपने अन्य जार की जांच करने के लिए javax.servlet-api जार का संदर्भ लें। उदाहरण के लिए, org.apache.santuario ने javax.servlet-api जार का संदर्भ दिया है। pom.xml:

<dependency> 
    <groupId>org.apache.santuario</groupId> 
    <artifactId>xmlsec</artifactId> 
    <version>1.4.3</version> 
</dependency> 

लेकिन जब आप Maven निर्भरता को देखो, यह javax.servlet-api जार जिसका संस्करण 2.3 3.1 से अधिक पुराना है का संदर्भ लें।

enter image description here

तो आप 2.3 संस्करण को बाहर रखना चाहिए। pom.xml:

<!-- exclude servlet-api 2.3 jar--> 
<dependency> 
    <groupId>org.apache.santuario</groupId> 
    <artifactId>xmlsec</artifactId> 
    <version>1.4.3</version> 
    <exclusions> 
     <exclusion> 
      <groupId>javax.servlet</groupId> 
      <artifactId>servlet-api</artifactId> 
     </exclusion> 
    </exclusions> 
</dependency> 

<!-- servlet-api 3.1 version has getVirtualServerName() --> 
<dependency> 
    <groupId>javax.servlet</groupId> 
    <artifactId>javax.servlet-api</artifactId> 
    <version>3.1.0</version> 
</dependency> 

III। वसंत बूट डिफ़ॉल्ट टॉमकैट 7 चलाते हैं। तो टॉमकैट 7 के बजाय अपने टोमकैट संस्करण 8 को परिभाषित करें। इसलिए कोड को अपने pom.xml जोड़ें:

<properties> 
     <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 
     <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> 
     <java.version>1.8</java.version> 
     <tomcat.version>8.5.5</tomcat.version> 
    </properties>