دفق خدمات الويب MTOM في إطار ربيع خدمات الويب
سؤال
أرغب في إرسال ملفات كبيرة من الخادم إلى العميل باستخدام MTOM و Spring WS. أدرك أن هذا ليس أفضل نهج لهذا النوع من الأشياء، لكنه متطلبات. لقد تم إعداد MTOM ويعمل بشكل رائع على الملفات الصغيرة حوالي 50 ميغابايت. أعاني من أخطاء الذاكرة للحصول على ملفات أكبر وتغيير أحجام الفضاء الكومة المختلفة، يمكنني إرسال ملفات أكبر قليلا، ولكن لا شيء قريب من 1GB. 1GB هو حالة الاختبار لي لهذا. كيف يمكنني دفق أو قطع خدمة MTOM من الخادم إلى العميل؟ أنا أستخدم Java 6 Update 17، Tomcat 6، و Spring WS 1.5.7 مع SaajsoapmessAgfactory.
لقد وجدت مثالا على البث مع JAX-WS، لكنني لست متأكدا من كيفية دمج هذا في نقطة نهاية ربيع WS.
المحلول
بالأمس، أواجه نفس المشكلة مع تحميل الملفات الكبيرة. وأخيرا كنت قادرا على العثور على الحل لذلك. WS Spring WS لديه رسالة مخصصة AXIOM org.springframework.ws.soap.axiom.AxiomSoapMessageFactory
والتي يمكن استخدام الملف بدلا من الذاكرة أثناء تحميل الملفات الكبيرة. التغيير الوحيد الذي يجب القيام به في التكوين الخاص بك هو تحديد الفول مع خصائصك المخصصة.
<bean id="messageFactory" class="org.springframework.ws.soap.axiom.AxiomSoapMessageFactory">
<property name="payloadCaching" value="false" />
<property name="attachmentCaching" value="true" />
<property name="attachmentCacheThreshold" value="1024"/>
</bean>
بمجرد أن يكون لديك فئات التكوين والآسيان المتوفرة في ClassPath، يستخدم Spring-WS تلقائيا ملفات مؤقتة لإجراء تحميلات وثيقة كبيرة.