รับเซสชันจาก HttpAdapter ไปยัง Adapter ที่ใช้ Java

มีวิธีใดในการรับเซสชันที่สร้างขึ้นใน httpAdapter ลงในคลาส java ในอะแดปเตอร์หรือไม่ ฉันกำลังเชื่อมต่อกับ https://jazz.net/ ด้วย httpadapter แต่ตอนนี้ฉันต้องการใช้โค้ด Java เพื่อเชื่อมต่อกับ URL เดียวกันในอะแดปเตอร์ ดังนั้นฉันจึงไม่ทราบวิธีเข้าถึงเซสชันที่สร้างไว้แล้ว

นี่คือรหัสการเชื่อมต่อของฉัน:

In javaScript, 
function login(){
var lpath = getLoginPath();
var input = {
    method : 'post',
    returnedContentType : 'html',
    path : lpath,
    parameters : {
        j_password : passwd,
        j_username : username
    }

};

var request = WL.Server.getClientRequest();
UserSession = request.getHeader("Cookie"); // here i am setting the value for a global variable UserSession.
return WL.Server.invokeHttp(input);
}

function getConnection(){
var instance = new com.worklight.customcode.PostRequest();

var rspath = getRootServicesPath();

var input = {
    method : 'get',
    returnedContentType : 'xml',
    path : rspath
};
return {
    result : instance.getXml(UserSession) // Here i am passing the value of session cookie into the java class 
};}

ในคลาส Java

class PostRequest{
 public String getXml(String cookieString){
    String params = "?offlineData={'projectAreaItemId':'_iTuLUmxfEeKR3t32SVbLKQ','executables':[{'terItemId':'_TNoyQW6qEeKR3t32SVbLKQ','scriptItemId':'_DF89AW6qEeKR3t32SVbLKQ'}]}";
    String url = "https://jazz.net/sandbox02-qm/secure/service/com.ibm.rqm.execution.common.service.IOfflineExecutionRestService"
            + params;
URLConnection connection = new URL(url).openConnection();
connection = new URL(url).openConnection();
    connection.setRequestProperty("User-Agent", "yes");
    connection.setRequestProperty("Content-Type",
            "application/x-www-form-urlencoded");
    connection.setRequestProperty("Accept-Encoding", "gzip");
    connection.setRequestProperty("Accept", "application/xml");
    connection.setRequestProperty("Cookie", cookieString);
    connection.setDoInput(true);
    connection.setDoOutput(true);
    ((HttpURLConnection) connection).setRequestMethod("POST");
    connection.setDoOutput(true);
String result = "";
        InputStream resp = connection.getInputStream();
        StringBuilder s = inputStreamToString(resp);
return s;
}
}

person Ashwini Maddala    schedule 16.04.2013    source แหล่งที่มา


คำตอบ (1)


คุณไม่จำเป็นต้องเข้าถึงรหัสเซสชัน เนื่องจากคุณ "มี" อยู่แล้ว คลาส Java ที่คุณเขียนเป็นส่วนหนึ่งของเซสชันอะแด็ปเตอร์หรือขอบเขต

สิ่งที่คุณต้องทำคือประกาศคลาสของคุณในอะแดปเตอร์ บางสิ่งเช่นนี้:

ชั้นเรียน

Class myHTTPClient
// implementation code goes here - the java code to connect to the same URL as in the adapter XML.

อะแดปเตอร์

var httpClient = new com.myHTTPClient
// your adapter code

วิธีนี้ทำให้ Java อยู่ในขอบเขตเดียวกันกับอะแด็ปเตอร์ ดังนั้นจึงไม่จำเป็นต้อง "รับ" ID เซสชัน

หากต้องการส่งผ่าน JSESSIONID ใน POST จากโค้ด Java ทำตามตัวอย่างที่ให้ไว้ใน WL.Server.invoidHttp API (ด้านล่างสุดของหน้า) ในอะแด็ปเตอร์ JavaScript ให้ใช้ตัวอย่าง... response.responseHeader มีส่วนหัว "Set-Cookie" ซึ่งคุณสามารถแยก JSESSIONID ส่งผ่านและใช้งานได้

person Idan Adar    schedule 17.04.2013
comment
แต่เมื่อฉันพยายามโพสต์จากคลาส Java ระบบจะถามข้อมูลรับรองผู้ใช้อีกครั้ง - person Ashwini Maddala; 18.04.2013
comment
ฉันใช้ 2 บรรทัดนี้ระหว่างเข้าสู่ระบบใน httpAdapter โดยที่ Cookies เป็นตัวแปรโกลบอล ฉันพยายามส่งต่อไปยังคลาส java มันผ่านอย่างถูกต้องเท่านั้น แต่ฉันไม่รู้ว่าฉันกำลังทำอะไรผิดในการสร้างคลาสการเชื่อมต่อ injava หรือไม่ คำขอ var = WL.Server.getClientRequest(); คุกกี้ = request.getHeader(คุกกี้); - person Ashwini Maddala; 18.04.2013
comment
อย่าใช้ความคิดเห็นสำหรับรหัส แก้ไขคำถามของคุณ เพิ่มโค้ด Java ของคุณ เพิ่ม Javascript ของคุณ - person Idan Adar; 18.04.2013
comment
นอกจากนี้ชื่อส่วนหัวคือ Set-Cookie - person Idan Adar; 18.04.2013
comment
ฉันพยายามทำเช่นนั้น แต่ได้รับคำตอบว่าคำขอไม่ถูกต้อง (รหัสสถานะ 400) - person Ashwini Maddala; 25.04.2013