استدعاء خدمة الويب AXIS2 من عميل XFire: مرجع نقطة النهاية (EPR) للعملية غير موجودة
-
21-09-2019 - |
سؤال
أحتاج إلى استدعاء خدمة الويب AXIS2 باستخدام WS-Security (رمز اسم المستخدم) من عميل XFIRE عبر HTTPS. يمكنني القيام بالتمرين عبر XFire Dynamic Client, ، ولكن لا حظ مع عميل قاعدة WSDL (أي إنشاء كعب Java من WSDL). هل يمكن لأي شخص أن يوضح لي ما يمكن أن يكون خطأ (كعب ، WS-Security شيء آخر)؟
استثناء:
استثناء في موضوع "Main" org.codehaus.xfire.xfireruntimeexception: لا يمكن استدعاء الخدمة .. استثناء متداخل هو org.codehaus.xfire.fault.xfirefault: مرجع نقطة النهاية (EPR) للعملية غير موجودة هو https: // localhost/services/dataservicesample2و WSA Action = org.codehaus.xfire.fault.xfirefault: مرجع نقطة النهاية (EPR) للعملية غير موجودة https: // localhost/services/dataservicesample2وعمل WSA =
شفرة:
public static void main(String[] args) throws MalformedURLException {
ProtocolSocketFactory easy = new EasySSLProtocolSocketFactory();
Protocol protocol = new Protocol("https", easy, 9443);
Protocol.registerProtocol("https", protocol);
ObjectServiceFactory serviceFactory = new ObjectServiceFactory();
serviceFactory.setStyle("message");
Service serviceModel = serviceFactory.create(DataServiceSample2PortType.class);
XFireProxyFactory factory = new XFireProxyFactory();
DataServiceSample2PortType service = (DataServiceSample2PortType) factory.create(serviceModel, "https://localhost:9443/services/DataServiceSample2");
Client client = Client.getInstance(service);
client.addOutHandler(new DOMOutHandler());
Properties properties = new Properties();
properties.setProperty(WSHandlerConstants.ACTION, WSHandlerConstants.USERNAME_TOKEN);
properties.setProperty(WSHandlerConstants.USER, "admin");
properties.setProperty(WSHandlerConstants.PASSWORD_TYPE, WSConstants.PW_TEXT);
properties.setProperty(WSHandlerConstants.PW_CALLBACK_CLASS, PasswordHandler.class.getName());
client.addOutHandler(new WSS4JOutHandler(properties));
sab.TopCustomerResponse topCustomersInCalifornia = service.topCustomersInCalifornia(null);
}
المحلول 2
أنا في عداد المفقودين "SOAPAction
"المعلمة في HTTP Header. يمكنك ضبطها مباشرة كما
HttpsURLConnection conn;
...
conn.setRequestProperty("SOAPAction", "urn:executeXml");
AFAIK في عميل XFIRE يمكن أرشيفه بهذه الطريقة:
Map m = new HashMap();
m.put("SOAPAction", "urn:executeXml");
client.setProperty(CommonsHttpMessageSender.HTTP_HEADERS, m);
نصائح أخرى
الرجاء محاولة استبدال المضيف المحلي مع عنوان IP للجهاز الذي تعمل فيه خدمتك. بدلاً من
factory.create(serviceModel,"https://localhost:9443/services/DataServiceSample2");
يمكنك محاولة تحديد عنوان IP مثل هذا
factory.create(serviceModel,"https://192.168.2.18:9443/services/DataServiceSample2");
يرجى ملاحظة أنه يعتبر ممارسة سيئة لشحن الكود مع معلمات غامضة. لذلك بعد اختباره ، ستحتاج إلى استبدال عنوان IP المشفر الصلب ببعض المتغيرات التي يمكن تكوينها بسهولة.