㈠ java.lang.NoClassDefFoundError: javax/xml/ws/WebServiceContext
websrevice是通過反射機制來找到你的類的
報的錯就是無法通過javax/xml/ws/WebServiceContext找到具體的類
㈡ java tomcat中service.xml中<context>的path設成""和設成"/"一樣嗎
不一樣。
""是service.xml文件所在路徑的相對路徑,/是項目根目錄
㈢ android里每個服務啟動時context到底從哪裡來的呢
1.android里每個服務啟動時context到底從哪裡來的呢????以mountservice的context為例
在SystemServer.java的run函數中有如下代碼
context = ActivityManagerService.main(factoryTest);
......
if (!"0".equals(SystemProperties.get("system_init.startmountservice"))) {
try {
/*
* NotificationManagerService is dependant on MountService,
* (for media / usb notifications) so we must start MountService first.
*/
Slog.i(TAG, "Mount Service");
mountService = new MountService(context);
ServiceManager.addService("mount", mountService);
} catch (Throwable e) {
reportWtf("starting Mount Service", e);
}
}
由此可知,由systemserver啟動的服務的context都來自ActivityManagerService
ActivityManagerService.java
public static final Context main(int factoryTest) {
......
ActivityThread at = ActivityThread.systemMain();
......
Context context = at.getSystemContext();
......
return context;
}
由上可知,該context是由ActivityThread 創建的
ActivityThread .java
public ContextImpl getSystemContext() {
synchronized (this) {
if (mSystemContext == null) {
ContextImpl context =
ContextImpl.createSystemContext(this);
LoadedApk info = new LoadedApk(this, "android", context, null,
CompatibilityInfo.DEFAULT_COMPATIBILITY_INFO);
context.init(info, null, this);
context.getResources().updateConfiguration(
getConfiguration(), getDisplayMetricsLocked(
Display.DEFAULT_DISPLAY,
CompatibilityInfo.DEFAULT_COMPATIBILITY_INFO));
mSystemContext = context;
//Slog.i(TAG, "Created system resources " + context.getResources()
// + ": " + context.getResources().getConfiguration());
}
}
return mSystemContext;
}
在ContextImpl .java中
static ContextImpl createSystemContext(ActivityThread mainThread) {
final ContextImpl context = new ContextImpl();
context.init(Resources.getSystem(), mainThread, Process.myUserHandle());
return context;
}
由此可知所有systemserver啟動的服務的context對象實際為一個ContextImpl對象
即ServerThread::run<-ActivityManagerService.main<-ActivityThread::getSystemContext<-ContextImpl.createSystemContext
2.對於一個apk中的context一般直接指向這個activity本身,因為activity本身即繼承自context
㈣ java webservice中怎麼獲得request
java webservice中通過復注制入WebServiceContext ,獲取request、session等
代碼如下:
@Resource
private WebServiceContext webServiceContext;
public String getLoginUser() {
HttpServletRequest request =
(HttpServletRequest) webServiceContext.getMessageContext().get(MessageContext.SERVLET_REQUEST);
HttpSession session = request.getSession();
return session.getAttribute("loginUser").toString();
}
㈤ 在Service中獲取獲取context,怎麼獲取
這個問題占看還有些混人,getContext()和getBaseContext()都不行,後來發現,Service的繼承關系為:java.lang.Object android.context.Context android.context.ContextWrapper android.app.Service即它本身就是一個Context,那麼就只要直接This就可以了
㈥ 如何在Android源碼中加入Java層系統服務
1. 在android/app/目錄下創建介面文件IServiceTest.aidl
package android.app;
oneway interface IServiceTest
{
void show();
}
2. 在Android.mk文件中的變數LOCAL_SRC_FILES中加入core/java/android/app/IServiceTest.aidl
如果要在sdk中發布這個服務就在變數aidl_files中加入一樣的路徑。
3. 通過aidl編譯器編譯IServiceTest.aidl,會生成一個IServiceTest.java文件。
4. 創建服務類ServiceTestSerice
class ServiceTestSerice extends IServiceTest.Stub{
private static final String TAG = 「ServiceTestSerice」;
Context mContext;
public ServiceTestSerice(Context context){
mContext = context;
}
public void show() throws RemoteException {
System.out.println(「My ServiceTestSerice」);
}
}
.5. 注冊服務
Java系統服務在ServerThread類的run()方法中生成並注冊到android平台,生成ServiceTestSerice實例對象,通過ServiceManager的addService方法將服務注冊到系統中。
try{
serviceTestSerice = new ServiceTestSerice(context);
ServiceManager.addService(Context.SERVICE_TEST, serviceTestSerice);
} catch (Throwable t) {
}
ServiceTestSerice serviceTestSerice;
以上代碼在ServerThread類的run()方法中。
在Context類中加入:
public static final StringSERVICE_TEST = 「servicetest」
ServiceTestManager sServiceTestManager;
6. 使用系統服務
編寫一個ServiceTestManager類,為包裝類。
public class ServiceTestManager{
private final IServiceTest mService;
ServiceTestManager(IServiceTest service){
mService = service;
}
public void test(){
try{
mService. show()
} catch (RemoteException ex){
}
}
}
7 提供應用層開發介面
在ContextImpl類中的getSystemService()方法中加入如下代碼:
else if (SERVICE_TEST.equals(name)){
return getServiceTestManager();
}
private ServiceTestManager getServiceTestManager(){
synchronized(sSync) {
if (sServiceTestManager == null){
IBinder b = ServiceManager.getService(SERVICE_TEST);
IServiceTest service = IServiceTest.Stub.asInterface(b);
sServiceTestManager = new ServiceTestManager(service);
}
}
調用過程如下:
ServiceTestManager manager= (ServiceTestManager) getSystemService(Context. SERVICE_TEST);
manager.show();
8. 測試
make
make update-api 更新current.xml文件
生成system.imz文件,放到<ANDROID_SDK>/platform/android-20/images/目錄下,
adb shell
service list
㈦ java中如何調用參數是context的方法
Context 上下文的意思, java中沒有這個參數, 當然也有可能是自己寫的類
具體要看看這個參數是哪個類, 如果是版sevlet中, 這個context表示sevlet本身吧權, 如果是android 中 通常表示 activity或者service 等組件
㈧ 如何在Service中獲得Context
Context是一個抽象基類,我們通過它訪問當前包的資源(getResources、getAssets)和啟動其他組件(Activity、Service、Broadcast)以及得到各種服務(getSystemService),當然,通過Context能得到的不僅僅只有上述這些內容。對Context的理解可以來說:Context提供了一個應用的運行環境,在Context的大環境里,應用才可以訪問資源,才能完成和其他組件、服務的交互,Context定義了一套基本的功能介面,我們可以理解為一套規范,而Activity和Service是實現這套規范的子類,這么說也許並不準確,因為這套規范實際是被ContextImpl類統一實現的,Activity和Service只是繼承並有選擇性地重寫了某些規范的實現。
看下繼承關系:
因此 Service本身就是Context的實現,所以只需要調用this
㈨ java WebService中獲取MessageContext.getCurrentContext為空,導致[SoapHeader]和[SoapBody]無法獲取.
@Resource
private WebServiceContext webServiceContext;
MessageContext messageContext = webServiceContext.getMessageContext();
用這個方法來獲取MessageContext試試。