Fallo con WebServices Security
"Ignacio Elorriaga" <[email protected]>
| Newsgroups | gmane.comp.java.javaspain |
|---|---|
| Message-ID | <[email protected]> |
Holaa a todo el mundo.
Bueno a ver si alguien sabe sobre WebServices Security en Java, que me trae
ya por el camino de la amargura estas ultimas semanas.
A ver si algun paso(lo hago mal) o algo tngo mal configurado, porque yo ya
no se que le pasa.
Segun los ejemplos que trae la web oficial de apache, tengo un
WS(StockQuoteService) al cual le voy a meter la seguridad de UsernameToken.
Desde ya muchas gracias a quien responda, porque estoy ppffff
Lo que hago es(con el tomcat inciado y desplegada una carpeta axis donde
meto todo):
1.- tengo el server-config.wsdd en el directorio WEB-INF, tal que:
<service name="stock-wss-01" provider="java:RPC" style="document"
use="literal">
<requestFlow>
<handler type="java:org.apache.ws.axis.security.WSDoAllReceiver">
<parameter name="passwordCallbackClass" value="
samples.stock.client.PWCallback"/>
<parameter name="action" value="UsernameToken"/>
</handler>
</requestFlow>
<parameter name="allowedMethods" value="getQuote"/>
<parameter name="className" value="samples.stock.client.StockQuoteService
"/>
<parameter name="scope" value="application"/>
</service>
2.- Hago un deploy del Servicio Web, con:
java -cp %AXISCLASSPATH%
org.apache.axis.client.AdminClient-lhttp://localhost:8080/axis/services/AdminService
server-config.wsdd
3.- Me genero las clases del cliente con WSDL2Java:
java -cp %AXISCLASSPATH% org.apache.axis.wsdl.WSDL2Java -o .
-Nhttp://localhost:8080/axis/services/stock-wss-01 samples.stock.client
http://localhost:8080/axis/services/stock-wss-01?wsdl
4.-Me genero el PWCallback, donde le indico el usuario que tiene que entrar
y la pass que le pondre.
public class PWCallback implements CallbackHandler {
public void handle(Callback[] callbacks)
throws IOException, UnsupportedCallbackException {
for (int i = 0; i < callbacks.length; i++) {
if (callbacks[i] instanceof WSPasswordCallback) {
WSPasswordCallback pc = (WSPasswordCallback) callbacks[i];
// set the password given a username
if ("carlos".equals(pc.getIdentifer())) {
pc.setPassword("pepe");
}
} else {
throw new UnsupportedCallbackException(callbacks[i],
"Unrecognized Callback");
}
}
}
5.- Me genero el client_deploy.wsdd tal que:
<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="UsernameToken"/>
<parameter name="user" value="carlos"/>
<parameter name="passwordCallbackClass" value="
samples.stock.client.PWCallback"/>
<parameter name="passwordType" value="PasswordText"/>
</handler>
</requestFlow >
</globalConfiguration >
</deployment>
6.- Ejecuto mi clase de prueba del cliente, tal que:
java -Daxis.clientConfigFile=client_deploy.wsdd -cp %AXISCLASSPATH%
samples.stock.client.StockServiceClient TBS
y me da un error que dice:
*Exception in thread "main" AxisFault
faultCode: {
http://schemas.xmlsoap.org/soap/envelope/}Server.generalException
faultSubcode:
faultString: WSDoAllReceiver: Request does not contain required Security
header
faultActor:
faultNode:
faultDetail:
{http://xml.apache.org/axis/}hostname:zaz-elorriagai
WSDoAllReceiver: Request does not contain required Security header
at org.apache.axis.message.SOAPFaultBuilder.createFault(
SOAPFaultBuilder.java:222)
at org.apache.axis.message.SOAPFaultBuilder.endElement(SOAPFaultBuilder.java
:129)
at org.apache.axis.encoding.DeserializationContext.endElement
(DeserializationContex
t.java:1087)
at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.endElement(Unknown
Source)
at
com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanEndEl
ement(Unknown Source)
at
com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDriver.next(Unknown
Source)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(Unknown
Source)
at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.next(Unknown
Source)
at
com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocum
ent(Unknown Source)
at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(Unknown
Source)
at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(Unknown
Source)
at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(Unknown
Source)
at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(Unknown
Source)
at com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(Unknown
Source)
at javax.xml.parsers.SAXParser.parse(Unknown Source)
at org.apache.axis.encoding.DeserializationContext.parse(
DeserializationContext.jav
a:227)
at org.apache.axis.SOAPPart.getAsSOAPEnvelope(SOAPPart.java:696)
at org.apache.axis.Message.getSOAPEnvelope(Message.java:435)
at org.apache.axis.handlers.soap.MustUnderstandChecker.invoke
(MustUnderstandChecker
.java:62)
at org.apache.axis.client.AxisClient.invoke(AxisClient.java:206)
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 samples.stock.client.StockWss01SoapBindingStub.getQuote
(StockWss01SoapBindingStu
b.java:106)
at samples.stock.client.StockServiceClient.main(StockServiceClient.java:15)
**Saludosss y muchas gracias por adelantado*