كيف يمكنني الوصول إلى ApplicationContext من داخل خدمة الإنترنت JAX-WS؟

StackOverflow https://stackoverflow.com/questions/602319

سؤال

وعلى غرار كيف يمكنني الوصول إلى ServletContext من داخل خدمة الإنترنت JAX-WS؟ ، هل هناك طريقة للوصول applicationContext، أسهل من هذا؟

import javax.annotation.Resource;
import javax.jws.WebService;
import javax.servlet.ServletContext;
import javax.xml.ws.WebServiceContext;
import javax.xml.ws.handler.MessageContext;

import org.springframework.web.context.WebApplicationContext;
import org.springframework.web.context.support.WebApplicationContextUtils;

@WebService
public class MyWebService {
    // boilerplate code begins :(

    @Resource
    private WebServiceContext context;
    private WebApplicationContext webApplicationContext = null;

    /**
     * @return
     * @throws IllegalStateException
     */
    private WebApplicationContext getWebApplicationContext()
            throws IllegalStateException {
        if (webApplicationContext != null)
            return webApplicationContext;
        ServletContext servletContext =
                (ServletContext) context.getMessageContext().get(
                        MessageContext.SERVLET_CONTEXT);
        webApplicationContext =
                WebApplicationContextUtils.getRequiredWebApplicationContext(servletContext);
        return webApplicationContext;
    }
}
هل كانت مفيدة؟

المحلول

وأنا لا أعتقد أن يجب أن يكون خدمة على شبكة الإنترنت لمعرفة السياقات على شبكة الإنترنت أو بريمج أو سياق تطبيقه. أنا لا أرى لماذا ينبغي أن تعرف أي من ذلك. لا ينبغي أن يكون أكثر سلبية بكثير؟ ضخ ما يحتاج إليه، والسماح لها القيام بعملها. تفاعلات الخدمة مع عميل يجب أن تقوم على عقد المحددة في خط الهجوم. إذا كان لديه للحصول على قيم غير معروف من سياق من نوع ما، كيف سيكون العملاء يعرفون ما يجب تعيين أو كيفية تعيين ذلك؟

وكنت تذهب أبعد من ذلك وأقول إن خدمة الإنترنت يجب أن يكون المجمع لواجهة خدمة الربيع. انها مجرد خيار واحد أكثر من بين كل السبل الممكنة للكشف عليه. خدمة الويب الخاص بك يجب أن تفعل أكثر من المشير وunmarshal الكائنات طلب XML / الاستجابة والتعاون مع الخدمات الربيع.

نصائح أخرى

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.web.context.support.SpringBeanAutowiringSupport;


@WebService( 
    endpointInterface = "Bla", 
    targetNamespace = "http://bla/v001", 
    wsdlLocation = "WEB-INF/wsdl/bla.wsdl",    
    serviceName = "BlaService",
    portName = "BlaPort")
public class BlaWs extends SpringBeanAutowiringSupport implements BlaPort {

  @Autowired
  @Qualifier("dao") 
  private Dao dao;
  ...
}

تأكد الخاص بك خدمة الفول الويب تمتد حبة الربيع.

هذا

وأود أن تثبيت مرشح الذي يحفظ ServletContext قبل تسلسل في ThreadLocal

ووفقا لجافادوك للطبقة SpringBeanAutowiringSupport، انظر: HTTP : //docs.spring.io/autorepo/docs/spring-framework/3.0.x/api/org/springframework/web/context/support/SpringBeanAutowiringSupport.html

وقراءة ملاحظة: في نهاية جافادوك

والسؤال الأصلي، قد تكون في الواقع، أن تكون الطريقة التي ينبغي أن يتم تنفيذها.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top