2014-02-11 47 views
0

我正在用C++開發一個使用apache axis2c的SOAP web服務。我使用services.xml設置一些服務特定的參數&我需要在axis2_svc_skeleton接口(例如,在axis2_get_instance函數中)獲取這些參數的值。但我不知道我該怎麼做?
下面是一些部分OS我的services.xml &我想在我的代碼訪問的myreadonlyparam值:使用axis2c開發Web服務時如何訪問軸骨架代碼中的服務參數?

<service name="myservice"> 
    <parameter name="myreadonlyparam" locked="xsd:true">myparamvalue</parameter> 
    ... 
</service> 

,這是我的代碼

AXIS2_EXPORT int axis2_get_instance(axis2_svc_skeleton_t ** inst, const axutil_env_t * env) 
{ 
    *inst = axis2_myservice_create(env); 
    if (!(*inst)) 
    { 
     return AXIS2_FAILURE; 
    } 
    //HERE I NEED SERVICE PARAMETER VALUE 
    ... 
} 

任何想法的一部分?

回答

2

恐怕不可能在沒有axis2_conf對象的情況下獲得服務配置。 axis2_conf對象只能在init_with_conf函數中訪問。

如何獲取服務參數舉例:

int AXIS2_CALL my_service_init_with_conf(
    axis2_svc_skeleton_t* skel, const axutil_env_t* env, axis2_conf* conf) 
{ 
    const axis2_char_t* service_name = "myservice"; 

    /* get service by name */ 
    struct axis2_svc* service = axis2_conf_get_svc(conf, env, service_name); 

    /* get service param */ 
    axutil_param_t* param = axis2_svc_get_param(service, env, "myreadonlyparam"); 

    /* get param value */ 
    const char* value = (const char*) axutil_param_get_value(param, env); 

    printf("PARAM VALUE: %s\n", value); 

    return AXIS2_SUCCESS; 
} 

/* Skeleton options */ 
static axis2_svc_skeleton_ops_t skel_ops = 
{ 
    my_service_init, 
    my_service_invoke, 
    my_service_on_fault, 
    my_service_free, 
    my_service_init_with_conf 
}; 


AXIS2_EXPORT int axis2_get_instance(
    axis2_svc_skeleton** skel, axutil_env_t* env) 
{ 
    *skel = (axis2_svc_skeleton_t*) AXIS2_MALLOC(
      env->allocator, sizeof(axis2_svc_skeleton_t)); 

    if (!*skel) 
     return AXIS2_FAILURE; 

    (*skel)->ops = &skel_ops; 
    (*skel)->func_array = NULL; 

    return AXIS2_SUCCESS; 
} 

輸出:

 
$ ./axis2_http_server 
PARAM VALUE: myparamvalue 
Started Simple Axis2 HTTP Server ... 
+0

我沒有你上面說的是什麼,但似乎init_with_conf(我使用1.6.0 AXIS2C功能不會被調用-win32) –

+0

'axis2_svc_skeleton_ops_t skel_ops'填寫是否正確?不要錯過指向'my_service_init_with_conf'函數的指針。 – loentar

+0

是的,它填寫正確。我已經在Windows和Linux上測試過它,它們都不起作用(都運行軸1.6.0) –