استدعاء خدمة الويب AXIS2 من عميل XFire: مرجع نقطة النهاية (EPR) للعملية غير موجودة

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

سؤال

أحتاج إلى استدعاء خدمة الويب 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 المشفر الصلب ببعض المتغيرات التي يمكن تكوينها بسهولة.

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