كيف يمكنني تغيير العنوان الذي تستخدمه خدمة ويب CXF إلى عنوان مختلف عن العنوان المحدد في ملف wsdl؟

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

  •  07-07-2019
  •  | 
  •  

سؤال

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

MyWebService serviceDefinition = new MyWebService(new URL(wsdlLocation));
service = serviceDefinition.getMyWebServicePort();

هل يعرف أحد أفضل الممارسات لهذا؟

طلب XML الذي يعمل.

<soap:Body>
<ns2:getData xmlns:ns2="http://services.test.com/">
<arg0>Test Name</arg0>
<arg1>55555555</arg1>
</ns2:getData>
</soap:Body>

طلب وكيل XML لا يعمل.

<soap:Body>
<ns1:getData xmlns:ns1="http://ws.test.com/">
<ns3:arg0 xmlns:ns2="http://services.test.com/" xmlns:ns3="http://ws.test.com/">Test Name</ns3:arg0>
<ns3:arg1 xmlns:ns2="http://services.test.com/" xmlns:ns3="http://ws.test.com/">55555555</ns3:arg1>
</ns1:getData>
</soap:Body>
هل كانت مفيدة؟

المحلول

ويمكن استخدام ClientProxyFactoryBean ؟ حتى أنك لا تحتاج إلى WSDL إذا كان لديك بذرة المترجمة. على سبيل المثال:

ClientProxyFactoryBean factory = new ClientProxyFactoryBean();
factory.setServiceClass(HelloWorld.class);
factory.setAddress("http://localhost:9000/Hello");
HelloWorld client = (HelloWorld) factory.create();

نصائح أخرى

MyWebService serviceDefinition = new MyWebService(new URL(wsdlLocation));
service = serviceDefinition.getMyWebServicePort();

((BindingProvider)service).getRequestContext()
    .put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY, "http://localhost:8080/foobar");
JaxWsProxyFactoryBeanfactory = new JaxWsProxyFactoryBean();

factory.setServiceClass(HelloWorld.class);
factory.setAddress("http://localhost:9000/Hello");
HelloWorld client = (HelloWorld) factory.create();

جاكس بدلاً من عميل أمام FactoryBeanfactory عملت بالنسبة لنا.

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