जवाब को Java कॉलआउट की मदद से अपरकेस में बदलें

Apigee Edge दस्तावेज़ देखा जा रहा है.
Apigee X दस्तावेज़ पर जाएं.
जानकारी

अगर पहली बार Java कॉलआउट का इस्तेमाल किया जा रहा है, तो हमारा सुझाव है कि आप Java कॉलआउट बनाने का तरीका जानने से शुरुआत करें.

यह कुकबुक सैंपल, आसान Java कॉलआउट नीति बनाने का तरीका बताता है, ताकि प्रॉक्सी फ़्लो के संदर्भ में कस्टम Java कोड चलाया जा सके.

सैंपल कोड क्या करता है?

इस सैंपल में मौजूद एपीआई प्रॉक्सी, टारगेट सेवा को कॉल करती है. यह सेवा, JSON फ़ॉर्मैट में जवाब देती है. Java कॉलआउट नीति टारगेट रिस्पॉन्स फ़्लो पर होती है. Java कोड, रिस्पॉन्स के हेडर और कॉन्टेंट को अंग्रेज़ी के बड़े अक्षरों में बदल देता है. यह एक आसान उदाहरण है. हालांकि, इसमें बताया गया है कि Edge पर एपीआई प्रॉक्सी के मामले में, कस्टम Java कोड कैसे काम करेगा.

सैंपल आज़माएं

प्रोजेक्ट डाउनलोड करें

चीज़ों को आसान बनाने के लिए, GitHub पर Apigee api-platform-samples रिपॉज़िटरी से यह प्रोजेक्ट डाउनलोड किया जा सकता है.

  1. अपने सिस्टम में api-platform-samples डाउनलोड करें या क्लोन करें.
  2. अपनी पसंद के टर्मिनल या कोड एडिटर में, api-platform-samples/doc-samples/java-cookbook प्रोजेक्ट पर जाएं.

Maven की मदद से अपना कोड कंपाइल करें

यह प्रोजेक्ट सेट अप किया गया है, ताकि इसे Maven के साथ कंपाइल किया जा सके. अगर आपको javac का इस्तेमाल करना है, तो हम Maven उदाहरण के साथ एक उदाहरण भी शामिल करेंगे.

  1. पक्का करें कि आपने Maven इंस्टॉल किया हुआ हो:
    mvn -version
    
  2. java-cookbook/buildsetup.sh स्क्रिप्ट को चलाएं. यह स्क्रिप्ट आपके स्थानीय Maven रेपो में ज़रूरी JAR डिपेंडेंसी इंस्टॉल करती है.
  3. cd को java-cookbool/callout डायरेक्ट्री में सेव करेगा.
  4. Maven इस्तेमाल करें:
    mvn clean package
    
  5. अगर आप चाहें, तो पुष्टि करें कि JAR फ़ाइल edge-custom-policy-java-cookbook.jar को java-cookbook/apiproxy/resources/java में कॉपी की गई थी. यह JAR फ़ाइलों के लिए ज़रूरी जगह है, जिसे आपको प्रॉक्सी के साथ डिप्लॉय करना है.

javac के साथ कंपाइल करें

अगर आपको कोड को कंपाइल करने के लिए javac का इस्तेमाल करना है, तो java-cookbook डायरेक्ट्री से ऐसा ही किया जा सकता है. आपके लिए ज़रूरी JAR फ़ाइलें, java-cookbook/lib डायरेक्ट्री में दी गई हैं.

  1. cd से api-platform-samples/doc-samples/java-cookbook को एक्सपोर्ट किया जाएगा.
  2. पक्का करें कि आपके पाथ में javac मौजूद है.

    javac -version
    
  3. यह javac निर्देश चलाएं:

    javac -d . -classpath ./lib/expressions-1.0.0.jar:./lib/message-flow-1.0.0.jar:. callout/src/main/java/ResponseUppercase.java
    
  4. JAR फ़ाइल को apiप्रॉक्सी/resources/java डायरेक्ट्री में कॉपी करें. यह JAR फ़ाइलों के लिए जगह की जानकारी है, जिसे आपको प्रॉक्सी की मदद से डिप्लॉय करना है.

    cp com/apigeesample/ResponseUppercase.class apiproxy/resources/java
    

प्रॉक्सी डिप्लॉय करें और कॉल करें

./java-cookbook डायरेक्ट्री में एक डिप्लॉय स्क्रिप्ट दी गई है. हालांकि, इसे चलाने से पहले आपको तेज़ी से सेटअप करना होगा.

  1. cd से api-platform-samples/doc-samples/java-cookbook
  2. अगर आपने अब तक ऐसा नहीं किया है, तो ../../setup/setenv.sh फ़ाइल खोलें और अपने Apigee खाते की जानकारी में बताए गए तरीके से इसमें बदलाव करें: आपका उपयोगकर्ता नाम (आपके खाते से जुड़ा ईमेल पता), आपके संगठन का नाम, और वह डोमेन जिसका इस्तेमाल एपीआई मैनेजमेंट कॉल करने के लिए किया जाता है. उदाहरण के लिए, Edge क्लाउड के लिए डोमेन https://api.enterprise.apigee.com है. हालांकि, अगर एज प्राइवेट क्लाउड का इस्तेमाल किया जा रहा है, तो आपका डोमेन अलग हो सकता है.
  3. setenv.sh फ़ाइल सेव करें.
  4. डिप्लॉय स्क्रिप्ट चलाएं:
    ./deploy.sh
    
  5. अगर डिप्लॉय हो जाता है, तो शुरू करने वाली स्क्रिप्ट को एक्ज़ीक्यूट करें:
    ./invoke.sh
    

    शुरू करने की स्क्रिप्ट एक cURL निर्देश को कॉल करती है, जो ऐसा दिखता है:

    curl  http://$org-$env.$api_domain/java-cookbook/json
    

यह जवाब कुछ ऐसा दिखेगा:

< HTTP/1.1 200 OK
< Date: Tue, 09 May 2017 20:31:08 GMT
< Content-Type: APPLICATION/JSON; CHARSET=UTF-8
< Content-Length: 68
< Connection: keep-alive
< Access-Control-Allow-Origin: *
< ETag: W/"44-RA5ERT/MMLIK54NVBWBSZG"
< X-Powered-By: APIGEE
< Server: Apigee Router
<
* Curl_http_done: called premature == 0
* Connection #0 to host willwitman-test.apigee.net left intact
{"FIRSTNAME":"JOHN","LASTNAME":"DOE","CITY":"SAN JOSE","STATE":"CA"}

प्रॉक्सी फ़्लो

यह प्रॉक्सी का फ़्लो दिखाने वाले ट्रेस टूल का शॉट है:

प्रॉक्सी स्ट्रक्चर

यह प्रॉक्सी की संरचना है. ध्यान दें कि इसके apiproxy/resources/java डायरेक्ट्री में एक JAR फ़ाइल शामिल होती है. JAR ज़रूरी है. हम यह सैंपल, सैंपल के तौर पर देते हैं. हालांकि, अगर आपको पसंद के मुताबिक काम करना है, तो आपको इसे खुद बनाना होगा और इसे इस जगह कॉपी करना होगा. Java कॉलआउट को कंपाइल और डिप्लॉय करने के बारे में दिशा-निर्देश पाने के लिए, Java कॉलआउट बनाने का तरीका देखें.

java-cookbook

    apiproxy
        java-cookbook.xml
    policies
        responseUppercase.xml
    proxies
        default.xml
    resources
        java
            ResponseUppercase.jar
    targets
        default.xml

Java कोड के बारे में जानकारी

Java की कॉलआउट नीति, नीचे दिए गए Java कोड को चलाती है. यह रिस्पॉन्स हेडर और रिस्पॉन्स के मुख्य हिस्से को अपरकेस में बदलती है. ध्यान रखें कि यह प्रोग्राम, Apigee के खास पैकेज का इस्तेमाल करता है. ये पैकेज ऐसे ऑब्जेक्ट और तरीके देते हैं जिनका इस्तेमाल करके, प्रॉक्सी फ़्लो के साथ सीधे इंटरैक्ट किया जा सकता है. ऐसे तरीके मौजूद हैं जिनकी मदद से, फ़्लो वैरिएबल, हेडर, मैसेज का कॉन्टेंट वगैरह पाया और सेट किया जा सकता है.

package com.apigeesample;

import com.apigee.flow.execution.ExecutionContext;
import com.apigee.flow.execution.ExecutionResult;
import com.apigee.flow.execution.spi.Execution;
import com.apigee.flow.message.MessageContext;

import java.util.Set; 

public class ResponseUppercase implements Execution{
    public ExecutionResult execute(MessageContext messageContext, ExecutionContext executionContext) {
        try {
            Set headers = messageContext.getMessage().getHeaderNames();
            for (String header : headers) {
                String h = messageContext.getMessage().getHeader(header).toUpperCase();
                messageContext.getMessage().setHeader(header, h);
            }
            String content = messageContext.getMessage().getContent();
            messageContext.getMessage().setContent(content.toUpperCase());
            return ExecutionResult.SUCCESS;
        } catch (Exception e) {
                return ExecutionResult.ABORT;
        }
    }
}

प्रॉक्सी के सैंपल की जांच करना

प्रॉक्सी खोलने और फ़ाइलों की जांच करने का काम हम पर छोड़ देते हैं. यहां Java की कॉलआउट नीति दी गई है. ध्यान दें कि यह, कॉलआउट से लागू की जाने वाली क्लास और JAR फ़ाइल का रेफ़रंस कैसे देता है. Java की कॉलआउट की सभी नीतियां इस पैटर्न का पालन करती हैं. Java की कॉलआउट नीति भी देखें.

<JavaCallout name="responseUppercase">         
    <ClassName>com.apigeesample.ResponseUppercase</ClassName>         
    <ResourceURL>java://ResponseUppercase.jar</ResourceURL> 
</JavaCallout>