بسيط رمز العميل جافا لخدمة الويب - أن تفعل شيئا مع QName؟

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

  •  03-07-2019
  •  | 
  •  

سؤال

وأنا على الحصول على الخطأ التالي عندما أحصل على الخط الذي يستدعي خدمة ويب الأساسية حقا لقد تعمل على القط / المحور.

Element or attribute do not match QName production: QName::=(NCName':')?NCName

هل حصلت على شيء خاطئ مع QName -؟. لا أستطيع حتى أن العثور على أي معلومات مفيدة حول هذا الموضوع

وكود موكلي هو التالي:

import javax.xml.namespace.QName;
import org.apache.axis.client.Call;
import org.apache.axis.client.Service;

    public class TestClient {

    public static void main(String [] args)
    {
        try{
            String endpoint = "http://localhost:8080/TestWebService/services/DoesMagic";  

            Service service = new Service();
            Call call = (Call) service.createCall();

            call.setTargetEndpointAddress( new java.net.URL(endpoint) );
            call.setOperationName( new QName("http://testPackage.fc.com/, doBasicStuff") );

            String ret = (String) call.invoke( new Object[] {"some kind of message"} );

            System.out.println(ret);

        }catch(Exception e){
            System.err.println(e.toString());
        }
    }
}

وبلدي كود عداد الويب أمر أساسي حقا - مجرد فئة بسيطة وترجع سلسلة الإدخال مع قليل من النص CONCAT:

public String doBasicStuff(String message)
    {
        return "This is your message: " + message;

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

المحلول

وكما يقول استثناء، يمكنك استدعاء منشئ QName بشكل غير صحيح:

new QName("http://testPackage.fc.com/, doBasicStuff")

وغير صحيحة. اعتقد ان لديك لتمرير سلسلتين، واحدة تحتوي على مساحة الاسم، واحدة من localname. ووثائق تحتوي عادة على الوصف على كيفية استخدام تلك الفئة.

نصائح أخرى

ويمكن أن يكون الخطأ المطبعي في QName الخاص بك:

new QName("http://testPackage.fc.com/", "doBasicStuff")

وبدلا من:

new QName("http://testPackage.fc.com/, doBasicStuff")

ويجب عليك استخدام واحدة من هذه:

public QName(String localPart)     or
public QName(final String namespaceURI, final String localPart)

ولكن     QName الجديد ( " http://testPackage.fc.com/ ، doBasicStuff") هو الخطأ، لأن كلا القيم في نفس السلسلة "..، .."

والتحيات

وQName الجديد ( "soapenc: السلسلة"، "doBasicStuff")

واكتب فقط اسم الأسلوب الذي يجب أن قضيتك فسيكون call.setOperationName("doBasicStuff");

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