简体   繁体   中英

HTTP SOAP Post Request

I need to send HTTP Request to publish some data in a WS

Eg:

http://localhost:8081/hello/publishAMANSequence/filter/sequenceGenerationTime=1696-09-01T00:00:00Z&AMANId=B1&landingSequenceEntry=11234567890EST

I take this fault from server:

 Parameter should be ordered in the following sequence: [sequenceGenerationTime, AMANId, landingSequenceEntry]

I'm doing something wrong in the order?

mule flow:

<jms:activemq-connector name="Active_MQ1" brokerURL="tcp://localhost:61616" validateConnections="true" doc:name="Active MQ"/>
<flow name="jmsFlow1" doc:name="jmsFlow1">
    <http:inbound-endpoint exchange-pattern="request-response" host="localhost" port="8081" path="hello" doc:name="HTTP"/>
    <cxf:jaxws-service doc:name="SOAP" serviceClass="aero.itec.amansequenceservice.AMANSequenceInfo"/>
    <component  doc:name="Java" class="implementations.AMANSequenceImpl"/>
    <mulexml:object-to-xml-transformer doc:name="Object to XML"/>
    <jms:outbound-endpoint  queue="StudioIN" connector-ref="Active_MQ1" doc:name="JMS"/>
    <logger message="#[message.payload]" level="INFO" doc:name="Logger"/>
</flow>

The url which you have provided is wrong. There should be a questionmark(?) after "filter". Then only it will consider it as parameters

http://localhost:8081/hello/publishAMANSequence/filter?sequenceGenerationTime=1696-09-01T00:00:00Z&AMANId=B1&landingSequenceEntry=11234567890EST

Moreover if you are trying to access a webservice you can't do that with a HTTP GET. You need to send it as a SOAP request. You can use APIs like CXF, AXIS etc.

Following this tutorial ~

I create a flow for publish the WS , that have an inbound-endpoint where I do the request

publish.flow:

 <jms:activemq-connector name="Active_MQ1" brokerURL="tcp://localhost:61616" validateConnections="true" doc:name="Active MQ"/>  
 <flow name="jmsFlow1" doc:name="jmsFlow1">

    <http:inbound-endpoint exchange-pattern="request-response" host="localhost" port="8081" path="hello" doc:name="HTTP"/>
    <cxf:jaxws-service doc:name="SOAP" serviceClass="aero.itec.amansequenceservice.AMANSequenceInfo" >
        <cxf:jaxb-databinding/>
        <cxf:inInterceptors>
            <spring:bean class="org.apache.cxf.interceptor.LoggingInInterceptor" />
        </cxf:inInterceptors>
        <cxf:outInterceptors>
            <spring:bean class="org.apache.cxf.interceptor.LoggingOutInterceptor" />
        </cxf:outInterceptors>
    </cxf:jaxws-service>

    <component  doc:name="Java" class="implementations.AMANSequenceImpl"/>
    <object-to-string-transformer doc:name="Object to String"/>
    <jms:outbound-endpoint  queue="StudioIN" connector-ref="Active_MQ1" doc:name="JMS"/>
    <logger message="#[message.payload]" level="INFO" doc:name="Logger"/>
</flow>

Then I create a client.class where I set the variable values:

client.java

public class AMANwsClient  extends AbstractTransformer{

@Override
protected Object doTransform(Object src, String enc)
        throws TransformerException {
     AMANSequence sequence = new AMANSequence();


    XMLGregorianCalendar fec;
    sequence.setSequenceGenerationTime(fec);
    sequence.setAMANId("AA");
    System.out.println(sequence);
    return sequence;
}

This class is used like a transformer, we don't need to pass parameters in the url, only need to connect to the endpoint URL

Finally, create a client.flow

<custom-transformer class="implementations.AMANwsClient" name="AMANwsClient" />
    <flow name="csvPublisher">

       <transformer ref="AMANwsClient" />
   <object-to-string-transformer doc:name="Object to String"/>
       <outbound-endpoint address="http://localhost:63081/hello" exchange-pattern="request-response">

           <cxf:jaxws-client clientClass="aero.itec.amansequenceservice.AMANSequenceInfo_Service" port="AMANSequenceInfoService" operation="publishAMANSequence">
               <cxf:inInterceptors>
                  <spring:bean class="org.apache.cxf.interceptor.LoggingInInterceptor" />
               </cxf:inInterceptors>
               <cxf:outInterceptors>
                  <spring:bean class="org.apache.cxf.interceptor.LoggingOutInterceptor" />
               </cxf:outInterceptors>
          </cxf:jaxws-client>

         </outbound-endpoint>

</flow>

Now I can save the payload into a JMS Queue and reproduce the payload from Browser, console and JMS.

If you have some suggestion to improve program performance, I'm open to listen to it.

http://localhost:8081/hello?wsdl放入SOAPUI ...它将在其中创建请求和响应...然后您可以在请求中传递值并调用Web服务...请检查以下内容参考: -http : //developers-blog.org/blog/default/Webservice-testing-with-soapUIhttp://quicksoftwaretesting.com/soapui-web-service-testing-tool/

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM