كيف يمكنني الوصول إلى ServletContext من داخل خدمة الإنترنت JAX-WS؟
-
06-07-2019 - |
سؤال
وأريد أن أشارك كائن بين بلدي وبلدي السيرفلتس خدمة ويب (JAX-WS) عن طريق تخزين أنها سمة السياق بريمج. ولكن كيف يمكنني استرداد سياق بريمج من خدمة الإنترنت؟
المحلول
ويتكون السياق بريمج متاحة من قبل JAX-WS عبر سياق الرسالة، التي يمكن استرجاعها باستخدام سياق خدمة ويب. وإدراج الأعضاء التالية يسبب JAX-WS لحقن إشارة إلى سياق خدمة على شبكة الإنترنت إلى خدمة الويب الخاص بك:
import javax.annotation.Resource;
import javax.servlet.ServletContext;
import javax.xml.ws.WebServiceContext;
import javax.xml.ws.handler.MessageContext;
...
@Resource
private WebServiceContext context;
وبعد ذلك، يمكنك الوصول إلى سياق بريمج باستخدام:
ServletContext servletContext =
(ServletContext) context.getMessageContext().get(MessageContext.SERVLET_CONTEXT);
نصائح أخرى
إذا كنت تستخدم مخضرم إضافة هذه التبعية!
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.4</version>
<scope>provided</scope>
</dependency>
ولذا فإنني حلها عن خطأ تعارض تجنب ل يحصل ServletContext <وأ href = "https://rishisoftwareblog.wordpress.com/2013/02/06/using-a-servlet-config-file-with-a-cxf-jax-rs-web-service/" يختلط = "نوفولو "> INFO:
وفي أسلوب فئة يمكنني استخدام
@WebService(endpointInterface = "choice.HelloWorld")
public class HelloWorldImpl implements HelloWorld {
@Resource
private WebServiceContext context;
public String sayHi(String text) {
HttpServletRequest request =(HttpServletRequest) context.getMessageContext().get(MessageContext.SERVLET_REQUEST);
System.out.println(request.getContextPath());
إذا الكائن الذي تحاول مشاركة ملف، ويقول myFile.txt
يمكنك استخدام الأسلوب التالي:
وأفضل طريقة للقيام بذلك أن الأول هو استخدام:
Thread.currentThread().getContextClassLoader().getResource("myFile.txt").getPath()
وهذا يعطي مسار أي myFile.txt
ملف وضعها في الدليل /WEB-INF/classes/
داخل مجلد WebContent
من تطبيق الويب.
في بيئة الكسوف JEE كنت بحاجة للحفاظ على myFile.txt
الملف، التي قد تحتاج إلى قراءة ضمن خدمة ويب، في المجلد src
لذلك ليتم نقلها إلى مجلد /WEB-INF/classes/
من قبل الوزع.