Hallo Allerseits,
ich möchte auf einen gesicherten WebService zugreifen (x.509) und habe einen Client,. einmal aus einer WSDL-Datei erzeugt und einmal ohne WSDL codiert, da ich dachte, dass vielleicht der fehler durch das wsdl2java kommt (ist aber wohl nicht so).
Es ist eigentlich ein einfaches Beispiel, dass ich ausprobiere. Anbei alles was ich so gemacht habe, vielleicht sieht jemand den Fehler schon aus dem Fehlercode:
Der Fehler kommt, nachdem ich die Verbindung zum Webservice aufbauen will (es wurde also fehlerlos kompiliert). Sämtliche jars sind in eclipse eingebunden. Ich habs auch in der Kommandozeile ohne Erfolg ausprobiert und weiß nicht weiter. Bitte guckt euch das an:
Egal welchen Client ich benutze bekomme ich folgende Fehlermeldung :
Mein Server sieht so aus
Der Client sieht so aus (ohne WSDL-Ableitung:
aus wsdl- abgeleitet:
meine server-wsdd (aussschnitt)
die client wsdd
die client_crypto.properties und die client.keystore sowie die server_crypto.properties und die server.keystore sind im classes Verzeichnis :cry:
ich möchte auf einen gesicherten WebService zugreifen (x.509) und habe einen Client,. einmal aus einer WSDL-Datei erzeugt und einmal ohne WSDL codiert, da ich dachte, dass vielleicht der fehler durch das wsdl2java kommt (ist aber wohl nicht so).
Es ist eigentlich ein einfaches Beispiel, dass ich ausprobiere. Anbei alles was ich so gemacht habe, vielleicht sieht jemand den Fehler schon aus dem Fehlercode:
Der Fehler kommt, nachdem ich die Verbindung zum Webservice aufbauen will (es wurde also fehlerlos kompiliert). Sämtliche jars sind in eclipse eingebunden. Ich habs auch in der Kommandozeile ohne Erfolg ausprobiert und weiß nicht weiter. Bitte guckt euch das an:
Egal welchen Client ich benutze bekomme ich folgende Fehlermeldung :
Code:
Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/xml/utils/URI$MalformedURIException
at org.apache.ws.security.message.WSSecSignature.prepare(WSSecSignature.java:350)
at org.apache.ws.security.message.WSSecSignature.build(WSSecSignature.java:703)
at org.apache.ws.security.action.SignatureAction.execute(SignatureAction.java:54)
at org.apache.ws.security.handler.WSHandler.doSenderAction(WSHandler.java:192)
at org.apache.ws.axis.security.WSDoAllSender.invoke(WSDoAllSender.java:170)
at org.apache.axis.strategies.InvocationStrategy.visit(InvocationStrategy.java:32)
at org.apache.axis.SimpleChain.doVisiting(SimpleChain.java:118)
at org.apache.axis.SimpleChain.invoke(SimpleChain.java:83)
at org.apache.axis.client.AxisClient.invoke(AxisClient.java:127)
at org.apache.axis.client.Call.invokeEngine(Call.java:2784)
at org.apache.axis.client.Call.invoke(Call.java:2767)
at org.apache.axis.client.Call.invoke(Call.java:2443)
at org.apache.axis.client.Call.invoke(Call.java:2366)
at org.apache.axis.client.Call.invoke(Call.java:1812)
at ha.TestSignaturSoapBindingStub.getGreeting(TestSignaturSoapBindingStub.java:106)
at TestSignaturClient.main(TestSignaturClient.java:18)
Mein Server sieht so aus
Code:
public class TestSignatur {
public String getGreeting(String name)
{
return "Hello "+name +"!";
}
}
Der Client sieht so aus (ohne WSDL-Ableitung:
Code:
import org.apache.axis.configuration.FileProvider;
import org.apache.axis.EngineConfiguration;
import org.apache.axis.client.Call;
import org.apache.axis.client.Service;
import org.apache.axis.encoding.XMLType;
import javax.xml.rpc.ParameterMode;
import java.net.URL;
public class TestSignaturClient
{
public static void main(String[] args) throws Exception
{
try
{
EngineConfiguration config = new FileProvider("c:\\java\\tomcat\\webapps\\axis\\WEB-INF\\client-config.wsdd");
Service service = new Service(config);
Call call=(Call) service.createCall();
URL url = new URL("http://localhost:8080/axis/services/TestService");
call.setTargetEndpointAddress(url);
call.setOperationName("getGreeting");
call.addParameter("name",XMLType.XSD_STRING,ParameterMode.IN);
call.setReturnType(XMLType.XSD_STRING);
Object parameters[]=new Object[1];
parameters[0]="Tester";
Object returnValue=call.invoke(parameters);
System.out.println("Response: "+returnValue);
}
catch(Exception e)
{
e.printStackTrace();
}
}
}
aus wsdl- abgeleitet:
Code:
import ha.*;
import java.rmi.RemoteException;
import javax.xml.rpc.ServiceException;
import org.apache.axis.EngineConfiguration;
import org.apache.axis.configuration.FileProvider;
public class TestSignaturClient
{
public static void main(String[] args) throws Exception
{
EngineConfiguration config = new FileProvider("c:\\java\\tomcat\\webapps\\axis\\WEB-INF\\client-config.wsdd");
TestSignaturServiceLocator loc = new TestSignaturServiceLocator(config);
TestSignatur_PortType pt = loc.getTestSignatur();
pt.getGreeting("hallo");
}
}
meine server-wsdd (aussschnitt)
Code:
<service name="TestSignatur" provider="java:RPC" style="document" use="literal">
<requestFlow>
<handler type="soapmonitor"/>
<handler type="java:org.apache.ws.axis.security.WSDoAllReceiver">
<parameter name="action" value="Signature"/>
<parameter name="signaturePropFile" value="server_crypto.properties" />
</handler>
</requestFlow>
<responseFlow>
<handler type="java:org.apache.ws.axis.security.WSDoAllSender">
<parameter name="action" value="Signature"/>
<parameter name="user" value="server"/>
<parameter name="passwordCallbackClass" value="PWCallback"/>
<parameter name="signaturePropFile" value="server_crypto.properties" />
</handler>
<handler type="soapmonitor"/>
</responseFlow>
<parameter name="className" value="TestSignatur"/>
<parameter name="allowedMethods" value="*"/>
<parameter name="scope" value="application"/>
</service>
die client wsdd
Code:
<deployment xmlns="http://xml.apache.org/axis/wsdd/" xmlns:java="http://xml.apache.org/axis/wsdd/providers/java">
<transport name="http" pivot="java:org.apache.axis.transport.http.HTTPSender"/>
<globalConfiguration >
<requestFlow >
<handler type="java:org.apache.ws.axis.security.WSDoAllSender" >
<parameter name="action" value="Signature"/>
<parameter name="user" value="client"/>
<parameter name="passwordCallbackClass" value="PWCallbackClient"/>
<parameter name="signaturePropFile" value="client_crypto.properties" />
<parameter name="mustUnderstand" value="false" />
</handler>
</requestFlow>
<responseFlow>
<handler type="java:org.apache.ws.axis.security.WSDoAllReceiver">
<parameter name="action" value="Signature"/>
<parameter name="signaturePropFile" value="client_crypto.properties" />
</handler>
</responseFlow>
</globalConfiguration>
</deployment>
die client_crypto.properties und die client.keystore sowie die server_crypto.properties und die server.keystore sind im classes Verzeichnis :cry: