Hi all... sorry for the disturb but i don't understand :-) ; i have this client:
import org.apache.axis.client.Call;
import org.apache.axis.client.Service;
import org.apache.axis.message.SOAPBodyElement;
import org.apache.axis.message.SOAPBody;
import org.apache.axis.utils.XMLUtils;
import javax.xml.rpc.ServiceException;
import java.util.Vector;
import org.w3c.dom.Document;
import javax.xml.namespace.QName;
import org.apache.log4j.Logger;
import java.net.URL;
import java.net.MalformedURLException;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.DocumentBuilder;
import java.util.*;
import it.eng.napsi.input.individuo.IndividualMarshaller;
public class SimpleAxisClient {
/**
* Il logger
*/
private static final Logger LOG = Logger.getLogger(SimpleAxisClient.class.
getName());
private Call getCall(String endpoint, String operation) throws
ServiceException {
if (LOG.isDebugEnabled()) {
LOG.debug("Creating call.....");
}
Call result = (Call) (new Service()).createCall();
try {
result.setTargetEndpointAddress(new URL(endpoint));
} catch (MalformedURLException ex) {
LOG.error(ex);
}
result.setOperation(new QName(endpoint, operation), operation);
if (LOG.isDebugEnabled()) {
LOG.debug("Done!!");
}
return result;
}
public Document getDocument(Document doc, String endpoint,
String operation) throws Exception {
Call call = getCall(endpoint, operation);
Vector result = (Vector) call.invoke(new Object[] {doc});
//Vector result = (Vector) call.invoke(new SOAPBodyElement[] { new
SOAPBodyElement( doc.getDocumentElement() )});
SOAPBodyElement sbe = (SOAPBodyElement) result.get(0);
if (LOG.isDebugEnabled()) {
LOG.debug("Body ricevuto: " +
XMLUtils.DocumentToString(sbe.getAsDocument()));
}
return sbe.getAsDocument();
}
public static void main(String args[]) throws Exception {
IndividualMarshaller ind = new IndividualMarshaller();
Map envi = new Hashtable();
envi.put( "codFisc","XXXXXXXXXXXXX" );
String xmlString = ind.toStringDocument( envi );
System.out.println( xmlString );
SimpleAxisClient client = new SimpleAxisClient();
Call miaCall = client.getCall(
"http://localhost:8082/ServicePublisher/services/Interaction","byFiscalCode");
Document doc = XMLUtils.newDocument(new
java.io.ByteArrayInputStream(xmlString.getBytes()));
System.out.println("doc.getDocumentElement(): " +
doc.getDocumentElement().getNodeName());
Vector result = (Vector) miaCall.invoke
(new SOAPBodyElement[] {new SOAPBodyElement(doc.
getDocumentElement())});
SOAPBodyElement sbe = (SOAPBodyElement) result.get(0);
System.out.println( "Ottenuto: "+ XMLUtils.DocumentToString(
sbe.getAsDocument() ) );
}
}
This is my service:
package it.eng.napsi.websrv.javabean;
//Java stuff
import org.w3c.dom.Document;
import java.rmi.RemoteException;
//Eng stuff
import it.eng.napsi.util.RetrieveProperties;
import it.eng.napsi.handlers.model.DataHandler;
import it.eng.napsi.handlers.DataHandlerFactory;
import it.eng.napsi.constraint.DataHandlerConstraint;
//Log4j stuff
import org.apache.log4j.Logger;
import it.eng.napsi.handlers.exception.HandlerException;
public class Interaction {
private String dataSourceName;
private DataHandler handler;
private static final Logger LOG = Logger.getLogger(Interaction.class.
getName());
public Interaction(){
try {
dataSourceName = "anagrafe";
if( LOG.isDebugEnabled() ){
LOG.debug( "RetrieveProperties has given to me: "+
dataSourceName );
}
handler = DataHandlerFactory.getInstance().getHandler(
DataHandlerConstraint.JDBC_TYPE, dataSourceName);
} catch (HandlerException ex) {
LOG.error("HandlerException", ex);
}
}
public Document byFiscalCode(Document doc) throws RemoteException {
try {
return handler.individualSearch(doc);
} catch (HandlerException ex) {
throw new RemoteException("HandlerException", ex);
}
}
public Document byUserData(Document input) throws RemoteException {
try {
return handler.individualSearch(input);
} catch (HandlerException ex) {
throw new RemoteException("HandlerException", ex);
}
}
public Document byFamilyCode(Document input) throws RemoteException {
try {
return handler.individualSearch(input);
} catch (HandlerException ex) {
throw new RemoteException("HandlerException", ex);
}
}
public Document toponomastic(Document input) throws RemoteException {
try {
return handler.toponomasticSearch(input);
} catch (HandlerException ex) {
throw new RemoteException("HandlerException", ex);
}
}
public Document update(Document input) throws RemoteException {
try {
return handler.update(input);
} catch (HandlerException ex) {
throw new RemoteException("HandlerException", ex);
}
}
}
This is the wsdl:
<?xml version="1.0" encoding="UTF-8"?>
<wsdl:definitions targetNamespace="http://javabean.websrv.napsi.eng.it"
xmlns:apachesoap="http://xml.apache.org/xml-soap"
xmlns:impl="http://javabean.websrv.napsi.eng.it"
xmlns:intf="http://javabean.websrv.napsi.eng.it"
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
xmlns:wsdlsoap="http://schemas.xmlsoap.org/wsdl/soap/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<!--WSDL created by Apache Axis version: 1.2beta3
Built on Aug 01, 2004 (05:59:22 PDT)-->
<wsdl:types>
<schema elementFormDefault="qualified"
targetNamespace="http://javabean.websrv.napsi.eng.it"
xmlns="http://www.w3.org/2001/XMLSchema">
<import namespace="http://xml.apache.org/xml-soap"/>
<element name="input" type="apachesoap:Document"/>
<element name="updateReturn" type="apachesoap:Document"/>
<element name="doc" type="apachesoap:Document"/>
<element name="byFiscalCodeReturn" type="apachesoap:Document"/>
<element name="input1" type="apachesoap:Document"/>
<element name="byUserDataReturn" type="apachesoap:Document"/>
<element name="input2" type="apachesoap:Document"/>
<element name="byFamilyCodeReturn" type="apachesoap:Document"/>
<element name="input3" type="apachesoap:Document"/>
<element name="toponomasticReturn" type="apachesoap:Document"/>
</schema>
</wsdl:types>
<wsdl:message name="toponomasticRequest">
<wsdl:part element="impl:input3" name="input"/>
</wsdl:message>
<wsdl:message name="updateResponse">
<wsdl:part element="impl:updateReturn" name="updateReturn"/>
</wsdl:message>
<wsdl:message name="byFamilyCodeRequest">
<wsdl:part element="impl:input2" name="input"/>
</wsdl:message>
<wsdl:message name="byUserDataRequest">
<wsdl:part element="impl:input1" name="input"/>
</wsdl:message>
<wsdl:message name="toponomasticResponse">
<wsdl:part element="impl:toponomasticReturn" name="toponomasticReturn"/>
</wsdl:message>
<wsdl:message name="byFamilyCodeResponse">
<wsdl:part element="impl:byFamilyCodeReturn" name="byFamilyCodeReturn"/>
</wsdl:message>
<wsdl:message name="updateRequest">
<wsdl:part element="impl:input" name="input"/>
</wsdl:message>
<wsdl:message name="byUserDataResponse">
<wsdl:part element="impl:byUserDataReturn" name="byUserDataReturn"/>
</wsdl:message>
<wsdl:message name="byFiscalCodeResponse">
<wsdl:part element="impl:byFiscalCodeReturn" name="byFiscalCodeReturn"/>
</wsdl:message>
<wsdl:message name="byFiscalCodeRequest">
<wsdl:part element="impl:doc" name="doc"/>
</wsdl:message>
<wsdl:portType name="Interaction">
<wsdl:operation name="update" parameterOrder="input">
<wsdl:input message="impl:updateRequest" name="updateRequest"/>
<wsdl:output message="impl:updateResponse" name="updateResponse"/>
</wsdl:operation>
<wsdl:operation name="byFiscalCode" parameterOrder="doc">
<wsdl:input message="impl:byFiscalCodeRequest"
name="byFiscalCodeRequest"/>
<wsdl:output message="impl:byFiscalCodeResponse"
name="byFiscalCodeResponse"/>
</wsdl:operation>
<wsdl:operation name="byUserData" parameterOrder="input">
<wsdl:input message="impl:byUserDataRequest" name="byUserDataRequest"/>
<wsdl:output message="impl:byUserDataResponse"
name="byUserDataResponse"/>
</wsdl:operation>
<wsdl:operation name="byFamilyCode" parameterOrder="input">
<wsdl:input message="impl:byFamilyCodeRequest"
name="byFamilyCodeRequest"/>
<wsdl:output message="impl:byFamilyCodeResponse"
name="byFamilyCodeResponse"/>
</wsdl:operation>
<wsdl:operation name="toponomastic" parameterOrder="input">
<wsdl:input message="impl:toponomasticRequest"
name="toponomasticRequest"/>
<wsdl:output message="impl:toponomasticResponse"
name="toponomasticResponse"/>
</wsdl:operation>
</wsdl:portType>
<wsdl:binding name="InteractionSoapBinding" type="impl:Interaction">
<wsdlsoap:binding style="document"
transport="http://schemas.xmlsoap.org/soap/http"/>
<wsdl:operation name="update">
<wsdlsoap:operation soapAction=""/>
<wsdl:input name="updateRequest">
<wsdlsoap:body use="literal"/>
</wsdl:input>
<wsdl:output name="updateResponse">
<wsdlsoap:body use="literal"/>
</wsdl:output>
</wsdl:operation>
<wsdl:operation name="byFiscalCode">
<wsdlsoap:operation soapAction=""/>
<wsdl:input name="byFiscalCodeRequest">
<wsdlsoap:body use="literal"/>
</wsdl:input>
<wsdl:output name="byFiscalCodeResponse">
<wsdlsoap:body use="literal"/>
</wsdl:output>
</wsdl:operation>
<wsdl:operation name="byUserData">
<wsdlsoap:operation soapAction=""/>
<wsdl:input name="byUserDataRequest">
<wsdlsoap:body use="literal"/>
</wsdl:input>
<wsdl:output name="byUserDataResponse">
<wsdlsoap:body use="literal"/>
</wsdl:output>
</wsdl:operation>
<wsdl:operation name="byFamilyCode">
<wsdlsoap:operation soapAction=""/>
<wsdl:input name="byFamilyCodeRequest">
<wsdlsoap:body use="literal"/>
</wsdl:input>
<wsdl:output name="byFamilyCodeResponse">
<wsdlsoap:body use="literal"/>
</wsdl:output>
</wsdl:operation>
<wsdl:operation name="toponomastic">
<wsdlsoap:operation soapAction=""/>
<wsdl:input name="toponomasticRequest">
<wsdlsoap:body use="literal"/>
</wsdl:input>
<wsdl:output name="toponomasticResponse">
<wsdlsoap:body use="literal"/>
</wsdl:output>
</wsdl:operation>
</wsdl:binding>
<wsdl:service name="InteractionService">
<wsdl:port binding="impl:InteractionSoapBinding" name="Interaction">
<wsdlsoap:address
location="http://localhost:8080/ServicePublisher/services/Interaction"/>
</wsdl:port>
</wsdl:service>
</wsdl:definitions>
This is the axis.wsdd service definition:
<service name="Interaction" type="" regenerateElement="false"
provider="java:MSG" style="message" use="literal" validate="false">
<parameter name="scope" value="Request" regenerateElement="false"/>
<parameter name="className"
value="it.eng.napsi.websrv.javabean.Interaction"
regenerateElement="false"/>
<parameter name="allowedMethods" value="*" regenerateElement="false"/>
<namespace>http://javabean.websrv.napsi.eng.it</namespace>
</service>
I'm using JBuilder 2005, Axis1.2RC3, JBoss3.2.6, JVM1.4.2_07; when i try this
client the request SOAP message is:
POST /ServicePublisher/services/Interaction HTTP/1.0
Content-Type: text/xml; charset=utf-8
Accept: application/soap+xml, application/dime, multipart/related, text/*
User-Agent: Axis/1.2RC3
Host: 127.0.0.1:8082
Cache-Control: no-cache
Pragma: no-cache
SOAPAction: ""
Content-Length: 351
<?xml version="1.0" encoding="UTF-8"?>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<soapenv:Body>
<ricercaIndividuo>
<codiceFiscale>XXXXXXXXXXXXX</codiceFiscale>
</ricercaIndividuo>
</soapenv:Body>
</soapenv:Envelope>
Well the response is:
HTTP/1.1 500 Internal Server Error
X-Powered-By: Servlet 2.4; Tomcat-5.0.28/JBoss-3.2.6 (build: CVSTag=JBoss_3_2_6
date=200410140106)
Content-Type: text/xml;charset=utf-8
Date: Wed, 27 Apr 2005 13:14:37 GMT
Server: Apache-Coyote/1.1
Connection: close
<?xml version="1.0" encoding="utf-8"?>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<soapenv:Body>
<soapenv:Fault>
<faultcode>soapenv:Server.generalException</faultcode>
<faultstring>Couldn't find an appropriate operation for XML QName
ricercaIndividuo</faultstring>
<detail>
<ns1:hostname
xmlns:ns1="http://xml.apache.org/axis/">PORT-IMMEDIATA</ns1:hostname>
</detail>
</soapenv:Fault>
</soapenv:Body>
</soapenv:Envelope>
Can anybody tell me why?
Thanks
____________________________________________________________
Navighi a 4 MEGA e i primi 3 mesi sono GRATIS.
Scegli Libero Adsl Flat senza limiti su http://www.libero.it