الجيل Axis2 الويب خدمة العملاء - أنواع دون تعديل العميل

StackOverflow https://stackoverflow.com/questions/205240

سؤال

هل من الممكن مع Axis2 والكسوف لتوليد عميل خدمة ويب، وأنها تستخدم أنواع جافا أن لديك بالفعل في حزم بدلا من إنشاء انها أنواع الخاصة. السبب هو بالطبع إذا كنت قد نوع A خلقت بالفعل، وأنه يخلق انها الخاصة نوع (أ) لا أستطيع أن مجرد تعيين متغير من نوع A إلى متغير من نوع B.

ويجري إنشاء اختصار من خدمة ويب نشرها إلى ملقم التطبيق. إذا لم يكن من الممكن توليد ذلك من شأنه أن يكون من الممكن لتوليد عميل من ملفات جافا القائمة بالفعل.

هل كانت مفيدة؟

المحلول

إذا كنت تريد حقا أن إعادة استخدام الطبقات القائمة، يمكنك استدعاء API Axis2 مباشرة دون توليد العميل باستخدام wsdl2java. وفيما يلي بعض رمز بسيط نسبيا لاستدعاء خدمة ويب. تحتاج فقط إلى ملء نقطة نهاية الخدمة على شبكة الإنترنت، وطريقة QName، ومن المتوقع عودة الفئة (الخانات)، والحجج في الخدمة. هل يمكن إعادة استخدام الطبقات الموجودة لديك كما قيم الإرجاع أو الحجج.

إذا معقدة خدمة الويب الخاص بك جدا ثم قد تجد أن عليك أن تذهب أعمق في API للحصول على هذا النهج في العمل.

serviceClient = new RPCServiceClient();
Options options = serviceClient.getOptions();

EndpointReference targetEPR = new EndpointReference("http://myservice");

options.setTo(targetEPR);

QName methodName = new QName("ns","methodName");

Class<?>[] returnTypes = new Class[] { String.class };

Object[] args = new Object[] { "parameter" };

Object[] response = serviceClient.invokeBlocking(methodName, args,
                returnTypes);

نصائح أخرى

وأنت توليد العميل خدمة ويب من اختصار، صحيح؟

والشيء الوحيد الذي الأداة wsdl2java يعرف عنه هو المعلومات في اختصار، لذلك سوف لا تعرف عن أي الأنواع التي قمت بإنشائها بالفعل.

إذا كنت تستطيع الحصول على معلومات نوع في اختصار قد تحصل عليه في العمل، على الرغم من أنني حاولت أبدا.

إذا كنت تريد طريقة سهلة لنسخ من نوع (أ) إلى النوع (ب) ثم هل يمكن أن محاولة <لأ href = "http://commons.apache.org/beanutils/api/org/apache/commons/beanutils/BeanUtils. أتش تي أم أل # copyProperties (java.lang.Object،٪ 20java.lang.Object) "يختلط =" نوفولو noreferrer "> BeanUtils.copyProperties ، طالما أن واضعي وحاصل من نوع A ونوع B المباراة.

ومشاريع جميلة أكثر بكثير جافا خدمات ويب تمر هذه. أنا لا أعرف إذا كان صافي / C # العالم لديها حل أكثر أناقة.

فمن المنطقي، كما ذكر مايك، لاستخدام BeanUtils.copyProperties.

وBR،
~ A

إذا كنت تستخدم الكسوف كما بيئة تطوير متكاملة الخاص، وهذا هو waht تحتاج: HTTP: //www.eclipse. غزاله / webtools / . وهو يفعل أشياء أخرى وراء ما تريده بالضبط.

ويمكنك استخدامها مباشرة من الدرجة ServiceClient للاتصال بخدمة الإنترنت، والتي تنص على مكالمة باستخدام XML فقط وإرجاع استجابة XML. للحصول على طرق مختلفة من الخدمة على شبكة الإنترنت، لديك لتحويل استجابة XML إلى بعض POJO جافا لاستخدامها. يحتاج معالجة الاستجابة الوحيد الذي ينبغي القيام به في نهاية الخاص بك. ما يمكنك القيام به مثل من XML إلى الخريطة الخ ...

وهكذا فإنك لن تحتاج إلى أي الطبقات كعب أخرى لاستدعاء أي خدمة ويب، يحتاج فقط للتعامل مع XML استجابة. يمكنك تحويل XML إلى POJO باستخدام الخروع أو JAXB يبس.

وهذه هي الطريقة التي لا تحتاج إلى تعديل العميل الخاص بك في كل مرة للفرق. خدمات الويب. يمكنك تطوير مثل توفير معالج ردا على العميل خارجيا. ذلك أن كل خدمة الويب المختلفة سيكون لديك فرق. استجابة الطبقة معالج الذي هو تنفيذ منكم التفاعل.

//common interface for response handlers...
//implement this for diff. web service/methods
public interface WSRespHandler{
    public Object getMeResp(Object respData);
}


//pass particular handler to client when you call some WS
public class WebServiceClient {
    public Object getResp(WSRespHandler respHandler) {
        ..

        return repHandler.getMeResp(xmlData);
    }
}

وإشارة:

<وأ href = "http://www.developer.com/java/web/article.php/3863416/Using-Axis2-and-Java-for-Asynchronous-Web-Service-Invocation-on-the- العميل Side.htm "يختلط =" نوفولو noreferrer "> http://www.developer.com/java/web/article.php/3863416/Using-Axis2-and-Java-for-Asynchronous-Web-Service-Invocation -on رأس العميل Side.htm

HTTP: // www.devdaily.com/blog/post/java/java-web-service-client-read-array-list/

وذلك بفضل.

وwww.techlads.com

في حالة هذا المنصب لا يزال من أي استخدام لشخص ما قرأت axis2 توليد دليل عملاء: <لأ href = "http://axis.apache.org/axis2/java/core/docs/userguide-creatingclients.html "يختلط =" نوفولو "> http://axis.apache.org/axis2/java/core/docs/userguide-creatingclients.html .

ويبدو أن تم تكوين المساعد Axis2 الكسوف لاستدعاء رمز جيل ADB في وضع متكامل (انظر <لأ href = "http://axis.apache.org/axis2/java/core/docs/adb/adb-howto هتمل "يختلط =" نوفولو "> http://axis.apache.org/axis2/java/core/docs/adb/adb-howto.html )، وبالتالي خلق الطبقات الداخلية في كعب خدمة ويب. أنا لا أعرف إذا كان تغيير وضع جيل إلى وضع الموسعة (إنشاء فئات البيانات من الطبقة كعب) هو ممكن، ولكن يمكنك أن تفعل ذلك سطر الأوامر باستخدام Wsdl2Java:

    %AXIS2_HOME%\bin\WSDL2Java -uri <wsdl file path> -p <package name> -u

والخيار -u يحكي مولد رمز بنك التنمية الآسيوي لخلق فئات البيانات وفصول منفصلة والطبقات ليس الداخلية في كعب.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top