当前位置: 首页 > 知识库问答 >
问题:

Eclipse Java CXF 2.7.9上的Webclient-修复格式错误的。wsdl文件

梁巴英
2023-03-14

由于其他人使用Apache Axis版本1.4创建了格式错误的WSDL定义,我很难创建WSDL客户端

让我向您展示我正在遵循的步骤:

首先,我在SOAP IU上加载我的WSDLendpoint超文本传输协议://xxxxx/ugar Soap? wsdl。程序自动生成以下请求:

<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 UI上,这不是问题,我可以手动添加缺少的文本,它将非常有效。

<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上使用web服务时,真正的痛苦开始了。Eclipse CXF 2.7.9。该工具将毫无困难地导入拙劣的wsdl版本,但调用其方法是无用的,因为它们很好。。。糟糕透了。

creditResponse=余额管理器。getBalanceManagement()。applyCredit(creditRequest,authHeader);

JAVA错误:方法信用(CreditRequest、MessageHeader)未为BalanceManagement类型定义。真的吗?你已经知道会发生这种情况。

所以

  • 我尝试手动编辑@WebMethod条目以包含缺失的功能。失败了。
  • 我尝试(几个小时)创建一个本地版本的oap.wsdl,包括丢失的标头,然后将其导入Java,但它抛出了神秘的org.apache.cxf.interceptor.ClientFaultConverter.processFaultDetail错误。
  • 我甚至试图切换到安讯士,但没有用。

请问,是否有任何解决方案Java,我可以打孔我的SOAP请求,URL,并获得响应作为. XML文件(或甚至作为纯文本,没问题!)就像SOAPUI一样?

非常感谢。

共有1个答案

司徒英卓
2023-03-14

好了,伙计们,我找到了一个可行的解决方案,可以手工提出请求。

创建一个新的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>

痛苦终于结束了!希望它对你也有用。

 类似资料:
  • 在将配置单元外部表从RC格式升级为ORC格式并在其上运行MSCK修复表(当我确实从表中选择全部时)时,我得到以下错误- 将RC格式的历史数据迁移到ORC格式的新定义的过程是什么?

  • 问题内容: 我正在获取JSON格式和唯一可用格式的数据提要。在PHP中,我正在使用json_decode解码JSON,但此操作已中断,并且我发现JSON是在某些地方生成的,其昵称用双引号引起来。我使用以下方法验证了这一点:http : //jsonformatter.curiousconcept.com 我无法控制数据的创建,但是当这种格式出现时,我必须处理它。解析后的数据将被放入MySQL TA

  • 问题内容: 错误 我在Java项目中使用wsimport来生成三个SOAP Web服务的源。前两个可以正常工作:我使用JAX-WS Maven插件来获取WSDL文件并生成相应的Java源文件。 对于一个Web服务,此操作失败。我收到以下错误: 罪犯 此WSDL文件与有效文件之间的区别在于错误消息中指出的行(第80、127和142行): 注意:wsdl文件的根元素定义“ s”名称空间,因此: 我尝试

  • FileLoaderImportCircularReferenceException:在“/app/config/routing_dev.yml”(“/app/config/routing_dev.yml”)中检测到循环引用 我正在努力做到这一点:http://symfony.com/doc/current/cookbook/routing/custom_route_loader.html#mor

  • 我正在使用Spring 5 WebClient进行一个外部api调用,希望将响应映射到这样的Object: 但是我收到一个错误: 但是,如果我像这样将响应正文提取到字符串: 然后它就正常工作了。有什么办法解决这个问题吗? 编辑: 响应正文: 标题:

  • 我试图解决这个问题已经有一段时间了,但我所尝试的一切都是无用的。我尝试了HttpClientHandler,但仍然得到了错误! 错误消息: 无法建立SSL连接,请参阅内部异常 身份验证失败,请参阅内部异常 收到的消息意外或格式不正确 我从零开始学习c#,而且我对c#语言非常熟悉,所以请解释一下问题所在。