Java – running Axis2 client version 1.5
So I'm trying to get the client to connect to the soap service I'm running through Axis2
I tried two methods. One is to use wsdl2java to build stubs and associated client classes, and then write a client class to build request messages and send them through stub Another way is to use serviceclient to connect
Both failed in their own way
Option #1, every time I send a message through the stub, I will reply:
org.apache.axis2.AxisFault: The input stream for an incoming message is null. at org.apache.axis2.transport.TransportUtils.createSOAPMessage(TransportUtils.java:87) at org.apache.axis2.transport.TransportUtils.createSOAPMessage(TransportUtils.java:67) at org.apache.axis2.description.OutInAxisOperationClient.handleResponse(OutInAxisOperation.java:354) at org.apache.axis2.description.OutInAxisOperationClient.send(OutInAxisOperation.java:417) at org.apache.axis2.description.OutInAxisOperationClient.executeImpl(OutInAxisOperation.java:229) at org.apache.axis2.client.OperationClient.execute(OperationClient.java:165)
Option #2, every time I run it, I get this exception:
org.apache.axis2.deployment.DeploymentException: org.apache.axis2.transport.local.LocalTransportSender
Option #2 source:
import javax.xml.stream.XMLStreamException; import org.apache.axiom.om.OMAbstractFactory; import org.apache.axiom.om.OMElement; import org.apache.axiom.om.OMFactory; import org.apache.axiom.om.OMNamespace; import org.apache.axis2.addressing.EndpointReference; import org.apache.axis2.client.Options; import org.apache.axis2.Constants; import org.apache.axis2.client.ServiceClient; public class loyaltyClient { private static EndpointReference targetEPR = new EndpointReference( "http://localhost:8080/axis2/services/service"); public static OMElement verifyCustomer(String customer_id) { OMFactory fac = OMAbstractFactory.getOMFactory(); OMNamespace omNs = fac.createOMNamespace( "http://localhost/","service"); OMElement method = fac.createOMElement("VerifyCustomer",omNs); OMElement value1 = fac.createOMElement("customer_id",omNs); OMElement value2 = fac.createOMElement("source_id",omNs); OMElement value3 = fac.createOMElement("source_password",omNs); OMElement value4 = fac.createOMElement("source_txnid",omNs); OMElement value5 = fac.createOMElement("timestamp",omNs); value1.addChild(fac.createOMText(value1,customer_id)); value2.addChild(fac.createOMText(value2,"source")); value3.addChild(fac.createOMText(value3,"1234")); value4.addChild(fac.createOMText(value4,"123")); value5.addChild(fac.createOMText(value5,"06-01-2010 12:01:01")); method.addChild(value1); method.addChild(value2); method.addChild(value3); method.addChild(value4); method.addChild(value5); return method; } public static void main(String[] args) { try { OMElement vctest = loyaltyClient.verifyCustomer("6177740603"); Options options = new Options(); options.setTo(targetEPR); options.setTransportInProtocol(Constants.TRANSPORT_HTTP); ServiceClient sender = new ServiceClient(); sender.setOptions(options); OMElement result = sender.sendReceive(vctest); String response = result.getFirstElement().getText(); System.out.println(response); } catch (Exception e) { //(XMLStreamException e) { System.out.println(e.toString()); } }
}
Solution
I also encountered the error "the input stream of the incoming message is empty" and used axis to connect to Net service provider
The problem is Net does not support the function called "block encoding". By default, axis will interrupt its request header in blocks, which is considered to comply with HTTP 1.1
In any case, you can turn this off in axis by doing the following:
// Turn off the Axsis Chunked feature,some service providers (like .Net) don't support chunked headers. Options options = serviceClient.getOptions(); options.setProperty(HTTPConstants.CHUNKED,Constants.VALUE_FALSE); serviceClient.setOptions(options);
It works for me I'm dealing with it Net service is to be able to specify the port name and ensure that the message payload has the namespace prefix of each element
I hope this information will help someone
Cheers, DC