SVN 6987 fixed net.yacy.upnp.devices.UPNPRootDevice for usage with JxPath > 1.3 by using a default namespace (xmlns="urn:schemas-upnp-org:device-1-0")
This commit now fixes the same problem for net.yacy.upnp.devices.UPNPService with default namespace (xmlns="urn:schemas-upnp-org:service-1-0")

git-svn-id: https://svn.berlios.de/svnroot/repos/yacy/trunk@6988 6c8d7289-2bf4-0310-a012-ef5d649a1542
pull/1/head
mikeworks 15 years ago
parent 2a20282505
commit 572e429eff

@ -83,11 +83,11 @@ public class UPNPService {
public UPNPService( JXPathContext serviceCtx, URL baseDeviceURL, UPNPDevice serviceOwnerDevice ) throws MalformedURLException { public UPNPService( JXPathContext serviceCtx, URL baseDeviceURL, UPNPDevice serviceOwnerDevice ) throws MalformedURLException {
this.serviceOwnerDevice = serviceOwnerDevice; this.serviceOwnerDevice = serviceOwnerDevice;
serviceType = (String)serviceCtx.getValue( "serviceType" ); serviceType = (String)serviceCtx.getValue( "upnp:serviceType" );
serviceId = (String)serviceCtx.getValue( "serviceId" ); serviceId = (String)serviceCtx.getValue( "upnp:serviceId" );
SCPDURL = UPNPRootDevice.getURL( (String)serviceCtx.getValue( "SCPDURL" ), baseDeviceURL ); SCPDURL = UPNPRootDevice.getURL( (String)serviceCtx.getValue( "upnp:SCPDURL" ), baseDeviceURL );
controlURL = UPNPRootDevice.getURL( (String)serviceCtx.getValue( "controlURL" ), baseDeviceURL ); controlURL = UPNPRootDevice.getURL( (String)serviceCtx.getValue( "upnp:controlURL" ), baseDeviceURL );
eventSubURL = UPNPRootDevice.getURL( (String)serviceCtx.getValue( "eventSubURL" ), baseDeviceURL ); eventSubURL = UPNPRootDevice.getURL( (String)serviceCtx.getValue( "upnp:eventSubURL" ), baseDeviceURL );
USN = serviceOwnerDevice.getUDN().concat( "::" ).concat( serviceType ); USN = serviceOwnerDevice.getUDN().concat( "::" ).concat( serviceType );
} }
@ -174,39 +174,43 @@ public class UPNPService {
DocumentContainer.registerXMLParser( DocumentContainer.MODEL_DOM, new JXPathParser() ); DocumentContainer.registerXMLParser( DocumentContainer.MODEL_DOM, new JXPathParser() );
UPNPService = new DocumentContainer( SCPDURL, DocumentContainer.MODEL_DOM ); UPNPService = new DocumentContainer( SCPDURL, DocumentContainer.MODEL_DOM );
JXPathContext context = JXPathContext.newContext( this ); JXPathContext context = JXPathContext.newContext( this );
Pointer rootPtr = context.getPointer( "UPNPService/scpd" ); context.registerNamespace("scpdns", "urn:schemas-upnp-org:service-1-0");
Pointer rootPtr = context.getPointer( "UPNPService/scpdns:scpd" );
JXPathContext rootCtx = context.getRelativeContext( rootPtr ); JXPathContext rootCtx = context.getRelativeContext( rootPtr );
rootCtx.registerNamespace("scpdns", "urn:schemas-upnp-org:service-1-0");
specVersionMajor = Integer.parseInt( (String)rootCtx.getValue( "specVersion/major" ) ); specVersionMajor = Integer.parseInt( (String)rootCtx.getValue( "scpdns:specVersion/scpdns:major" ) );
specVersionMinor = Integer.parseInt( (String)rootCtx.getValue( "specVersion/minor" ) ); specVersionMinor = Integer.parseInt( (String)rootCtx.getValue( "scpdns:specVersion/scpdns:minor" ) );
parseServiceStateVariables( rootCtx ); parseServiceStateVariables( rootCtx );
Pointer actionsListPtr = rootCtx.getPointer( "actionList" ); Pointer actionsListPtr = rootCtx.getPointer( "scpdns:actionList" );
JXPathContext actionsListCtx = context.getRelativeContext( actionsListPtr ); JXPathContext actionsListCtx = context.getRelativeContext( actionsListPtr );
Double arraySize = (Double)actionsListCtx.getValue( "count( action )" ); actionsListCtx.registerNamespace("scpdns", "urn:schemas-upnp-org:service-1-0");
Double arraySize = (Double)actionsListCtx.getValue( "count( scpdns:action )" );
UPNPServiceActions = new HashMap(); UPNPServiceActions = new HashMap();
for ( int i = 1; i <= arraySize.intValue(); i++ ) { for ( int i = 1; i <= arraySize.intValue(); i++ ) {
ServiceAction action = new ServiceAction(); ServiceAction action = new ServiceAction();
action.name = (String)actionsListCtx.getValue( "action["+i+"]/name" ); action.name = (String)actionsListCtx.getValue( "scpdns:action["+i+"]/scpdns:name" );
action.parent = this; action.parent = this;
Pointer argumentListPtr = null; Pointer argumentListPtr = null;
try { try {
argumentListPtr = actionsListCtx.getPointer( "action["+i+"]/argumentList" ); argumentListPtr = actionsListCtx.getPointer( "scpdns:action["+i+"]/scpdns:argumentList" );
} catch ( JXPathException ex ) { } catch ( JXPathException ex ) {
// there is no arguments list. // there is no arguments list.
} }
if ( argumentListPtr != null ) { if ( argumentListPtr != null ) {
JXPathContext argumentListCtx = actionsListCtx.getRelativeContext( argumentListPtr ); JXPathContext argumentListCtx = actionsListCtx.getRelativeContext( argumentListPtr );
Double arraySizeArgs = (Double)argumentListCtx.getValue( "count( argument )" ); argumentListCtx.registerNamespace("scpdns", "urn:schemas-upnp-org:service-1-0");
Double arraySizeArgs = (Double)argumentListCtx.getValue( "count( scpdns:argument )" );
List orderedActionArguments = new ArrayList(); List orderedActionArguments = new ArrayList();
for ( int z = 1; z <= arraySizeArgs.intValue(); z++ ) { for ( int z = 1; z <= arraySizeArgs.intValue(); z++ ) {
ServiceActionArgument arg = new ServiceActionArgument(); ServiceActionArgument arg = new ServiceActionArgument();
arg.name = (String)argumentListCtx.getValue( "argument["+z+"]/name" ); arg.name = (String)argumentListCtx.getValue( "scpdns:argument["+z+"]/scpdns:name" );
String direction = (String)argumentListCtx.getValue( "argument["+z+"]/direction" ); String direction = (String)argumentListCtx.getValue( "scpdns:argument["+z+"]/scpdns:direction" );
arg.direction = direction.equals( ServiceActionArgument.DIRECTION_IN ) ? ServiceActionArgument.DIRECTION_IN : ServiceActionArgument.DIRECTION_OUT; arg.direction = direction.equals( ServiceActionArgument.DIRECTION_IN ) ? ServiceActionArgument.DIRECTION_IN : ServiceActionArgument.DIRECTION_OUT;
String stateVarName = (String)argumentListCtx.getValue( "argument["+z+"]/relatedStateVariable" ); String stateVarName = (String)argumentListCtx.getValue( "scpdns:argument["+z+"]/scpdns:relatedStateVariable" );
ServiceStateVariable stateVar = (ServiceStateVariable)UPNPServiceStateVariables.get( stateVarName ); ServiceStateVariable stateVar = (ServiceStateVariable)UPNPServiceStateVariables.get( stateVarName );
if ( stateVar == null ) { if ( stateVar == null ) {
throw new IllegalArgumentException( "Unable to find any state variable named " + stateVarName + " for service " + getServiceId() + " action " + action.name + " argument " + arg.name ); throw new IllegalArgumentException( "Unable to find any state variable named " + stateVarName + " for service " + getServiceId() + " action " + action.name + " argument " + arg.name );
@ -229,56 +233,58 @@ public class UPNPService {
} }
private void parseServiceStateVariables( JXPathContext rootContext ) { private void parseServiceStateVariables( JXPathContext rootContext ) {
Pointer serviceStateTablePtr = rootContext.getPointer( "serviceStateTable" ); Pointer serviceStateTablePtr = rootContext.getPointer( "scpdns:serviceStateTable" );
JXPathContext serviceStateTableCtx = rootContext.getRelativeContext( serviceStateTablePtr ); JXPathContext serviceStateTableCtx = rootContext.getRelativeContext( serviceStateTablePtr );
Double arraySize = (Double)serviceStateTableCtx.getValue( "count( stateVariable )" ); serviceStateTableCtx.registerNamespace("scpdns", "urn:schemas-upnp-org:service-1-0");
Double arraySize = (Double)serviceStateTableCtx.getValue( "count( scpdns:stateVariable )" );
UPNPServiceStateVariables = new HashMap(); UPNPServiceStateVariables = new HashMap();
for ( int i = 1; i <= arraySize.intValue(); i++ ) { for ( int i = 1; i <= arraySize.intValue(); i++ ) {
ServiceStateVariable srvStateVar = new ServiceStateVariable(); ServiceStateVariable srvStateVar = new ServiceStateVariable();
String sendEventsLcl = null; String sendEventsLcl = null;
try { try {
sendEventsLcl = (String)serviceStateTableCtx.getValue( "stateVariable["+i+"]/@sendEvents" ); sendEventsLcl = (String)serviceStateTableCtx.getValue( "scpdns:stateVariable["+i+"]/scpdns:@sendEvents" );
} catch ( JXPathException defEx ) { } catch ( JXPathException defEx ) {
// sendEvents not provided defaulting according to specs to "yes" // sendEvents not provided defaulting according to specs to "yes"
sendEventsLcl = "yes"; sendEventsLcl = "yes";
} }
srvStateVar.parent = this; srvStateVar.parent = this;
srvStateVar.sendEvents = sendEventsLcl.equalsIgnoreCase( "no" ) ? false : true; srvStateVar.sendEvents = sendEventsLcl.equalsIgnoreCase( "no" ) ? false : true;
srvStateVar.name = (String)serviceStateTableCtx.getValue( "stateVariable["+i+"]/name" ); srvStateVar.name = (String)serviceStateTableCtx.getValue( "scpdns:stateVariable["+i+"]/scpdns:name" );
srvStateVar.dataType = (String)serviceStateTableCtx.getValue( "stateVariable["+i+"]/dataType" ); srvStateVar.dataType = (String)serviceStateTableCtx.getValue( "scpdns:stateVariable["+i+"]/scpdns:dataType" );
try { try {
srvStateVar.defaultValue = (String)serviceStateTableCtx.getValue( "stateVariable["+i+"]/defaultValue" ); srvStateVar.defaultValue = (String)serviceStateTableCtx.getValue( "scpdns:stateVariable["+i+"]/scpdns:defaultValue" );
} catch ( JXPathException defEx ) { } catch ( JXPathException defEx ) {
// can happend since default value is not // can happend since default value is not
} }
Pointer allowedValuesPtr = null; Pointer allowedValuesPtr = null;
try { try {
allowedValuesPtr = serviceStateTableCtx.getPointer( "stateVariable["+i+"]/allowedValueList" ); allowedValuesPtr = serviceStateTableCtx.getPointer( "scpdns:stateVariable["+i+"]/scpdns:allowedValueList" );
} catch ( JXPathException ex ) { } catch ( JXPathException ex ) {
// there is no allowed values list. // there is no allowed values list.
} }
if ( allowedValuesPtr != null ) { if ( allowedValuesPtr != null ) {
JXPathContext allowedValuesCtx = serviceStateTableCtx.getRelativeContext( allowedValuesPtr ); JXPathContext allowedValuesCtx = serviceStateTableCtx.getRelativeContext( allowedValuesPtr );
Double arraySizeAllowed = (Double)allowedValuesCtx.getValue( "count( allowedValue )" ); allowedValuesCtx.registerNamespace("scpdns", "urn:schemas-upnp-org:service-1-0");
Double arraySizeAllowed = (Double)allowedValuesCtx.getValue( "count( scpdns:allowedValue )" );
srvStateVar.allowedvalues = new HashSet(); srvStateVar.allowedvalues = new HashSet();
for ( int z = 1; z <= arraySizeAllowed.intValue(); z++ ) { for ( int z = 1; z <= arraySizeAllowed.intValue(); z++ ) {
String allowedValue = (String)allowedValuesCtx.getValue( "allowedValue["+z+"]" ); String allowedValue = (String)allowedValuesCtx.getValue( "scpdns:allowedValue["+z+"]" );
srvStateVar.allowedvalues.add( allowedValue ); srvStateVar.allowedvalues.add( allowedValue );
} }
} }
Pointer allowedValueRangePtr = null; Pointer allowedValueRangePtr = null;
try { try {
allowedValueRangePtr = serviceStateTableCtx.getPointer( "stateVariable["+i+"]/allowedValueRange" ); allowedValueRangePtr = serviceStateTableCtx.getPointer( "scpdns:stateVariable["+i+"]/scpdns:allowedValueRange" );
} catch ( JXPathException ex ) { } catch ( JXPathException ex ) {
// there is no allowed values list, can happen // there is no allowed values list, can happen
} }
if ( allowedValueRangePtr != null ) { if ( allowedValueRangePtr != null ) {
srvStateVar.minimumRangeValue = (String)serviceStateTableCtx.getValue( "stateVariable["+i+"]/allowedValueRange/minimum" ); srvStateVar.minimumRangeValue = (String)serviceStateTableCtx.getValue( "scpdns:stateVariable["+i+"]/scpdns:allowedValueRange/scpdns:minimum" );
srvStateVar.maximumRangeValue = (String)serviceStateTableCtx.getValue( "stateVariable["+i+"]/allowedValueRange/maximum" ); srvStateVar.maximumRangeValue = (String)serviceStateTableCtx.getValue( "scpdns:stateVariable["+i+"]/scpdns:allowedValueRange/scpdns:maximum" );
try { try {
srvStateVar.stepRangeValue = (String)serviceStateTableCtx.getValue( "stateVariable["+i+"]/allowedValueRange/step" ); srvStateVar.stepRangeValue = (String)serviceStateTableCtx.getValue( "scpdns:stateVariable["+i+"]/scpdns:allowedValueRange/scpdns:step" );
} catch ( JXPathException stepEx ) { } catch ( JXPathException stepEx ) {
// can happend since step is not mandatory // can happend since step is not mandatory
} }

Loading…
Cancel
Save