com.ct c .wstx.ex c .WstxParsingException: неожиданный закрывающий тег </span>; ожидается </br> - PullRequest
0 голосов
/ 07 января 2020

Я создал классы-заглушки с помощью инструмента CXF wsdl2 java. Я использую библиотеку Apache CXF с JCIFS. Я проверил сам файл WSDL через пару инструментов, это хорошо. Вот код Похоже, что некоторые настройки я должен сделать.

// Код, связанный с аутентификацией JCIFS

jcifs.Config.setProperty("jcifs.smb.client.domain", "NTS");
jcifs.Config.setProperty("jcifs.netbios.wins", "ecmchat.mark.gov");
jcifs.Config.setProperty("jcifs.smb.client.soTimeout", "300000"); // 5 minutes
jcifs.Config.setProperty("jcifs.netbios.cachePolicy", "1200"); // 20 minutes
jcifs.Config.setProperty("jcifs.smb.client.username", "user");
jcifs.Config.setProperty("jcifs.smb.client.password", "password");

//Register the jcifs URL handler to enable NTLM
jcifs.Config.registerSmbURLHandler();

// Настройки WSDL и клиента

URL wsdlURL = BF.WSDL_LOCATION;
if (args.length > 0 && args[0] != null && !"".equals(args[0])) {
    File wsdlFile = new File(args[0]);
    try {
        if (wsdlFile.exists()) {
            wsdlURL = wsdlFile.toURI().toURL();
        } else {
            wsdlURL = new URL(args[0]);
        }
    } catch (MalformedURLException e) {
        e.printStackTrace();
    }
}

BF ss = new BF(wsdlURL, SERVICE_NAME);
BFSoap port = ss.getBFSoap12();

Client client = ClientProxy.getClient(port);
HTTPConduit http = (HTTPConduit) client.getConduit();

HTTPClientPolicy httpClientPolicy = new HTTPClientPolicy();

httpClientPolicy.setConnectionTimeout(36000);
httpClientPolicy.setAllowChunking(false);
httpClientPolicy.setReceiveTimeout(32000);

http.setClient(httpClientPolicy);

// Вызов метода

System.out.println("Invoking testMethod...");
String _testMethod__return = port.testMethod();
System.out.println("testMethod.result=" + _testMethod__return);

Я получаю следующее исключение

Caused by: com.ctc.wstx.exc.WstxParsingException: Unexpected close tag </span>; expected </br>.
 at [row,col,system-id]: [59,22,"https://ecmchat.mark.gov/BF/BF.asmx"]
    at com.ctc.wstx.sr.StreamScanner.constructWfcException(StreamScanner.java:621)
    at com.ctc.wstx.sr.StreamScanner.throwParseError(StreamScanner.java:491)
    at com.ctc.wstx.sr.StreamScanner.throwParseError(StreamScanner.java:475)
    at com.ctc.wstx.sr.BasicStreamReader.reportWrongEndElem(BasicStreamReader.java:3365)
    at com.ctc.wstx.sr.BasicStreamReader.readEndElem(BasicStreamReader.java:3292)
    at com.ctc.wstx.sr.BasicStreamReader.nextFromTree(BasicStreamReader.java:2911)
    at com.ctc.wstx.sr.BasicStreamReader.next(BasicStreamReader.java:1123)
    at org.apache.cxf.staxutils.StaxUtils.readDocElements(StaxUtils.java:1361)
    at org.apache.cxf.staxutils.StaxUtils.readDocElements(StaxUtils.java:1255)
    at org.apache.cxf.staxutils.StaxUtils.read(StaxUtils.java:1183)
    at org.apache.cxf.wsdl11.WSDLManagerImpl.loadDefinition(WSDLManagerImpl.java:235)
    ... 9 more

Если я закомментирую проверку подлинности JCIFS NTLM код, я получаю ошибку HTTP 401. Поэтому, я считаю, что, по крайней мере, он проходит какой-то этап авторизации.

И, если я использую локальный WSDL вместо удаленного URL WSDL, то я получаю другую ошибку, например, «метод не реализован» при вызове метода. Может быть, это из-за того, что я не правильно использую локальный WSDL. Я даже не знаю, можем ли мы использовать локальную ссылку WSDL для удаленного сервиса.

Затем я создал фиктивный сервис SoapUI с этим WSDL, и тот же код (но без кода аутентификации JCIFS) работает хорошо, и успешно вызывает методы.

Мне кажется, что я должен добавить более подходящие настройки в код, связанный с конфигурацией. Прав ли я, и знаете ли вы что-нибудь для проверки подлинности NTLM и Apache CXF?

Но ошибка синтаксического анализа сбивает с толку ???

1 Ответ

0 голосов
/ 07 января 2020

Я не знаю, связано ли это. Мой оригинальный URL WSDL, который я дал, был таким. https://ecmchat.mark.gov/BF/BF.asmx Я добавил? Wsdl, как показано ниже https://ecmchat.mark.gov/BF/BF.asmx?wsdl Затем я получаю другую ошибку.

Интересно, почему это работает, если я получаю доступ к своей локальной версии SoapUI той же службы WSDL, но не к удаленной.

Invoking testMethod...
Jan 07, 2020 10:47:25 AM org.apache.cxf.phase.PhaseInterceptorChain doDefaultLogging
WARNING: Interceptor for {https://ecmchat.mark.gov}BF#{https://ecmchat.mark.gov}testMethod has thrown exception, unwinding now
java.lang.UnsupportedOperationException: Method not implemented.
    at java.net.URLStreamHandler.openConnection(URLStreamHandler.java:96)
    at java.net.URL.openConnection(URL.java:1028)
    at org.apache.cxf.transport.https.HttpsURLConnectionFactory.createConnection(HttpsURLConnectionFactory.java:92)
    at org.apache.cxf.transport.http.URLConnectionHTTPConduit.createConnection(URLConnectionHTTPConduit.java:121)
    at org.apache.cxf.transport.http.URLConnectionHTTPConduit.setupConnection(URLConnectionHTTPConduit.java:125)
    at org.apache.cxf.transport.http.HTTPConduit.prepare(HTTPConduit.java:505)
    at org.apache.cxf.interceptor.MessageSenderInterceptor.handleMessage(MessageSenderInterceptor.java:47)
    at org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:308)
    at org.apache.cxf.endpoint.ClientImpl.doInvoke(ClientImpl.java:530)
    at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:441)
    at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:356)
    at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:314)
    at org.apache.cxf.frontend.ClientProxy.invokeSync(ClientProxy.java:96)
    at org.apache.cxf.jaxws.JaxWsClientProxy.invoke(JaxWsClientProxy.java:140)
    at com.sun.proxy.$Proxy33.testMethod(Unknown Source)
    at edison.learn.BFSoap_BFSoap12_Client.main(BFSoap_BFSoap12_Client.java:90)

Exception in thread "main" javax.xml.ws.soap.SOAPFaultException: Method not implemented.
    at org.apache.cxf.jaxws.JaxWsClientProxy.mapException(JaxWsClientProxy.java:195)
    at org.apache.cxf.jaxws.JaxWsClientProxy.invoke(JaxWsClientProxy.java:145)
    at com.sun.proxy.$Proxy33.testMethod(Unknown Source)
    at edison.learn.BFSoap_BFSoap12_Client.main(BFSoap_BFSoap12_Client.java:90)
Caused by: java.lang.UnsupportedOperationException: Method not implemented.
    at java.net.URLStreamHandler.openConnection(URLStreamHandler.java:96)
    at java.net.URL.openConnection(URL.java:1028)
    at org.apache.cxf.transport.https.HttpsURLConnectionFactory.createConnection(HttpsURLConnectionFactory.java:92)
    at org.apache.cxf.transport.http.URLConnectionHTTPConduit.createConnection(URLConnectionHTTPConduit.java:121)
    at org.apache.cxf.transport.http.URLConnectionHTTPConduit.setupConnection(URLConnectionHTTPConduit.java:125)
    at org.apache.cxf.transport.http.HTTPConduit.prepare(HTTPConduit.java:505)
    at org.apache.cxf.interceptor.MessageSenderInterceptor.handleMessage(MessageSenderInterceptor.java:47)
    at org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:308)
    at org.apache.cxf.endpoint.ClientImpl.doInvoke(ClientImpl.java:530)
    at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:441)
    at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:356)
    at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:314)
    at org.apache.cxf.frontend.ClientProxy.invokeSync(ClientProxy.java:96)
    at org.apache.cxf.jaxws.JaxWsClientProxy.invoke(JaxWsClientProxy.java:140)
    ... 2 more
...