এখানে তালিকাভুক্ত উত্তরগুলি যা আপনাকে ব্যবহার SOAPHandler
করতে গাইড করে তা সম্পূর্ণ সঠিক। এই পদ্ধতির সুবিধা হ'ল এটি যে কোনও জ্যাক্স-ডাব্লুএস বাস্তবায়নের সাথে কাজ করবে, কারণ এসওএপিএইচএন্ডহ্যান্ডলার জ্যাক-ডাব্লুএস স্পেসিফিকেশনের অংশ। তবে এসওএপিএইচএন্ডল্যান্ডারের সমস্যাটি হ'ল এটি স্পষ্টভাবে মেমোরিটিতে পুরো এক্সএমএল বার্তাটি উপস্থাপন করার চেষ্টা করে। এটি বিশাল স্মৃতি ব্যবহারের দিকে নিয়ে যেতে পারে। জ্যাক্স-ডাব্লুএস এর বিভিন্ন বাস্তবায়ন এর জন্য তাদের নিজস্ব কর্মসীমা যুক্ত করেছে। আপনি যদি বড় অনুরোধ বা বৃহত্তর প্রতিক্রিয়া নিয়ে কাজ করেন, তবে আপনাকে মালিকানাধর্মী একটি পদ্ধতির মধ্যে নজর দেওয়া দরকার।
যেহেতু আপনি "জেডিকে ১.৫ বা তার চেয়ে ভাল এর মধ্যে অন্তর্ভুক্ত রয়েছে" সম্পর্কে জিজ্ঞাসা করেছেন তাই আমি জ্যাকস-ডাব্লুএস আরআই (ওরফে মেট্রো) যা জেডিকে অন্তর্ভুক্ত রয়েছে সেটিকেই আনুষ্ঠানিকভাবে জবাবদিহি করব।
জ্যাকস-ডাব্লুএস আরআইয়ের এর জন্য একটি নির্দিষ্ট সমাধান রয়েছে যা মেমরির ব্যবহারের ক্ষেত্রে অত্যন্ত দক্ষ।
Https://javaee.github.io/metro/doc/user-guide/ch02.html#eype-handlers-in-jax-ws-ri দেখুন । দুর্ভাগ্যক্রমে সেই লিঙ্কটি এখন ভেঙে গেছে তবে আপনি এটি ওয়েব্যাক মেশিনে খুঁজে পেতে পারেন। আমি নীচে হাইলাইটগুলি দেব:
২০০ 2007 সালে ফিরে মেট্রো লোকেরা একটি অতিরিক্ত হ্যান্ডলারের ধরণের প্রবর্তন করেMessageHandler<MessageHandlerContext>
, যা মেট্রোর মালিকানাধীন। এটি SOAPHandler<SOAPMessageContext>
মেমোরি ডিওএম প্রতিনিধিত্ব করার চেষ্টা করে না বলে এটি আরও কার্যকর ।
মূল ব্লগ নিবন্ধ থেকে গুরুত্বপূর্ণ পাঠ্য এখানে:
MessageHandler:
জ্যাকস-ডাব্লুএস স্পেসিফিকেশন এবং আরআই-র আরও ভাল বার্তা বিমূর্ততা সরবরাহ করে এক্সটেনসিবল হ্যান্ডলার কাঠামোটি ব্যবহার করে আমরা MessageHandler
আপনার ওয়েব পরিষেবা অ্যাপ্লিকেশনগুলি প্রসারিত করার জন্য ডেকে একটি নতুন হ্যান্ডলার প্রবর্তন করেছি । মেসেজহ্যান্ডলারটি এসওএপিএইচএন্ডলারের অনুরূপ, এর বাস্তবায়নগুলি অ্যাক্সেস পায়MessageHandlerContext
(মেসেজকন্টেক্সট এক্সটেনশন)। ম্যাসেজহ্যান্ডলারকন্টেক্সটের মাধ্যমে যে কোনও ব্যক্তি বার্তা অ্যাক্সেস করতে পারে এবং বার্তা এপিআই ব্যবহার করে এটি প্রক্রিয়া করতে পারে। আমি যেমন ব্লগের শিরোনামে রেখেছি, এই হ্যান্ডলারটি আপনাকে বার্তায় কাজ করতে দেয়, যা কেবলমাত্র কোনও ডিওএম ভিত্তিক বার্তা নয় বার্তাটি অ্যাক্সেস / প্রক্রিয়া করার কার্যকর উপায় সরবরাহ করে। হ্যান্ডলারের প্রোগ্রামিং মডেলটি একই এবং বার্তা হ্যান্ডলারগুলি স্ট্যান্ডার্ড লজিকাল এবং এসওএপি হ্যান্ডলারগুলির সাথে মিশ্রিত করা যায়। আমি জ্যাক্স-ডাব্লুএস আরআই ২.১.৩ এ একটি নমুনা যুক্ত করেছি যাতে বার্তাগুলি লগ করতে বার্তা হ্যান্ডলারের ব্যবহার দেখানো হয় এবং এখানে নমুনার একটি স্নিপেট রয়েছে:
public class LoggingHandler implements MessageHandler<MessageHandlerContext> {
public boolean handleMessage(MessageHandlerContext mhc) {
Message m = mhc.getMessage().copy();
XMLStreamWriter writer = XMLStreamWriterFactory.create(System.out);
try {
m.writeTo(writer);
} catch (XMLStreamException e) {
e.printStackTrace();
return false;
}
return true;
}
public boolean handleFault(MessageHandlerContext mhc) {
.....
return true;
}
public void close(MessageContext messageContext) { }
public Set getHeaders() {
return null;
}
}
(2007 ব্লগ পোস্ট থেকে শেষ উদ্ধৃতি)
আপনার কাস্টম হ্যান্ডলারটি বলা বাহুল্য, LoggingHandler
উদাহরণস্বরূপ, কোনও প্রভাব ফেলতে আপনার হ্যান্ডলার চেইনে যুক্ত করা দরকার। এটি অন্য Handler
যে কোনও যুক্ত করার মতোই , সুতরাং কীভাবে এটি করা যায় তার জন্য আপনি এই পৃষ্ঠার অন্যান্য উত্তরগুলি সন্ধান করতে পারেন ।
আপনি একটি জানতে পারেন পূর্ণ উদাহরণস্বরূপ মধ্যে মেট্রো GitHub রেপো ।