Веб-клиент на Eclipse Java CXF 2.7.9 - Исправление искаженного файла .wsdl - PullRequest
0 голосов
/ 29 мая 2020

Мне очень трудно создать WSDL-клиент из-за искаженного определения WSDL, созданного с помощью Apache Axis версии 1.4 кем-то другим.

Позвольте мне показать вам шаги, которые я выполняю:

Сначала я загружаю свою конечную точку WSDL http://xxxxx/uglySoap?wsdl на SOAP IU. Программа автоматически генерирует следующий запрос:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:bal="http://xxxx/uglySoap.xsd">
   <soapenv:Header/>
   <soapenv:Body>
      <bal:CreditRequest>
         <bal:MSISDN>?</bal:MSISDN>
         <bal:amountToCredit>?</bal:amountToCredit>
         <!--Optional:-->
         <bal:reason>?</bal:reason>
         <bal:transId>?</bal:transId>
      </bal:CreditRequest>
   </soapenv:Body>
</soapenv:Envelope>

Этот запрос неверен, потому что в нем отсутствует заголовок (где вы указываете учетные данные). В пользовательском интерфейсе SOAP это не проблема, я могу добавить недостающий текст вручную, и он будет работать идеально.

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:msp="http:xxxxxx/uglySoap.xsd" xmlns:bal="http://xxxxxx/uglySoap.xsd">
   <soapenv:Header>

          <msp:messageHeader>
         <msp:trackingMessageHeader>
            <msp:messageId>xxx</msp:messageId>
            <msp:carrierId>xxx</msp:carrierId>
            <msp:userId>xxxx</msp:userId>
            <msp:password>xxxx</msp:password>            
         </msp:trackingMessageHeader>
      </msp:messageHeader>
   </soapenv:Header>

<!--from here is the same thing as before-->
   <soapenv:Body>
      <bal:CreditRequest>
         <bal:MSISDN>xxxxx</bal:MSISDN>
         <bal:amountToCredit>xxxx</bal:amountToCredit>
         <!--Optional:-->
         <bal:reason>xxxx</bal:reason>
         <bal:transId>xxxx</bal:transId>
      </bal:CreditRequest>
   </soapenv:Body>
</soapenv:Envelope>

Настоящая боль начинается, когда я пытаюсь использовать веб-службу на Java. Eclipse CXF 2.7.9. инструмент без проблем импортирует испорченную версию wsdl, но вызывать его методы бесполезно, поскольку они хорошо ... испорчены.

JAVA ОШИБКА: кредит метода (CreditRequest, MessageHeader) не определен для типа BalanceManagement. Действительно чувак? Вы уже знали, что это должно произойти.

Итак ...

  • Я попытался вручную отредактировать записи @WebMethod, чтобы включить недостающие функции. Это не удалось.
  • Я пытался (несколько часов) создать локальную версию уродливого Soap .wsdl, включить отсутствующий заголовок и затем импортировать его в Java, но он выдает crypti c org. apache .cxf.interceptor.ClientFaultConverter.processFaultDetail ошибки.
  • Я даже пытался переключиться на Axis, но безрезультатно.

Пожалуйста, есть ли какое-нибудь решение для Java, где я мог бы просто пробить свой SOAP запрос, URL, и получить ответ в виде файла. XML (или даже в виде обычного текста, нет проблем!), как это делает SOAP UI?

Спасибо!

1 Ответ

0 голосов
/ 29 мая 2020

Хорошо, ребята, я нашел рабочее решение, чтобы делать запросы вручную.

Создайте новый проект Maven:

package main;

import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;
import org.junit.Assert;

import io.restassured.path.xml.XmlPath;

public class Client {

    public void executeRequest() {

        try

        {

            CloseableHttpClient client = HttpClients.createDefault(); // create client
            HttpPost request = new HttpPost("http://172.27.241.11:8195/mspgwservices/services/BalanceManagement"); // Create
                                                                                                                    // the

            String requestXmlText = "<soapenv:Envelope ...INCLUDE YOUR XML REQUEST HERE, ON THE SAME WAY YOU WOULD DO IT ON SOAP UI... </soapenv:Envelope>";

            StringEntity stringEntity = new StringEntity(requestXmlText, "utf-8");

            request.addHeader("soapAction", "Credit");
            request.addHeader("Accept", "text/xml");
            request.addHeader("Content-Type", "text/xml;charset=utf-8");
            request.setEntity(stringEntity);

            CloseableHttpResponse response = client.execute(request);// Execute the command

            int statusCode = response.getStatusLine().getStatusCode();
// Get the status code and assert
            System.out.println("Status code: " + statusCode);

            Assert.assertEquals(200, statusCode);

            String responseString = EntityUtils.toString(response.getEntity(), "UTF-8");

// Getting the Response body
            System.out.println(responseString);

            XmlPath jsXpath = new XmlPath(responseString);
            String textResult = jsXpath.getString("respDescription");
            System.out.println("result: " + textResult );

        }

        catch (Exception ex)

        {
            System.out.println("Error." + ex.toString());
        }

    }

}

Также не забудьте добавить следующие строки в свой POM. XML, чтобы импортировать все требуемые библиотеки

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>BalanceadorLineas</groupId>
  <artifactId>BalanceadorLineas</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <build>
    <sourceDirectory>src</sourceDirectory>
    <plugins>

      <plugin>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>3.8.0</version>
        <configuration>
          <source>1.8</source>
          <target>1.8</target>
        </configuration>
      </plugin>
    </plugins>
  </build>
  <dependencies>
<dependency>
    <groupId>org.apache.httpcomponents</groupId>
    <artifactId>httpclient</artifactId>
    <version>4.5.12</version>
</dependency>

    <dependency>
        <groupId>org.springframework.restdocs</groupId>
        <artifactId>spring-restdocs-restassured</artifactId>
        <version>2.0.4.RELEASE</version>
    </dependency>

    <dependency>
    <groupId>org.scala-js</groupId>
    <artifactId>scalajs-junit-test-runtime_2.11</artifactId>
    <version>1.1.0</version>
</dependency>

  </dependencies>
</project>

Наконец-то боль прошла! Надеюсь, это сработает и для вас.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...