/** * Process this instruction * * @param context the dynamic context of the transformation * @return a TailCall to be executed by the caller, always null for this instruction */ public TailCall processLeavingTail(XPathContext context) throws XPathException { Controller controller = context.getController(); SequenceReceiver out = context.getReceiver(); int opt = options; int ann = annotation; // we may need to change the namespace prefix if the one we chose is // already in use with a different namespace URI: this is done behind the scenes // by the Outputter CharSequence value = expandChildren(context); if (schemaType != null) { // test whether the value actually conforms to the given type XPathException err = schemaType.validateContent( value, DummyNamespaceResolver.getInstance(), context.getConfiguration().getNameChecker()); if (err != null) { ValidationException verr = new ValidationException( "Attribute value " + Err.wrap(value, Err.VALUE) + " does not the match the required type " + schemaType.getDescription() + ". " + err.getMessage()); verr.setErrorCode("XTTE1540"); verr.setLocator(this); throw verr; } } else if (validationAction == Validation.STRICT || validationAction == Validation.LAX) { try { ann = controller.getConfiguration().validateAttribute(nameCode, value, validationAction); } catch (ValidationException e) { DynamicError err = DynamicError.makeDynamicError(e); String errorCode = e.getErrorCodeLocalPart(); if (errorCode == null) { errorCode = (validationAction == Validation.STRICT ? "XTTE1510" : "XTTE1515"); } err.setErrorCode(errorCode); err.setXPathContext(context); err.setLocator(this); err.setIsTypeError(true); throw err; } } try { out.attribute(nameCode, ann, value, locationId, opt); } catch (XPathException err) { throw dynamicError(this, err, context); } return null; }
public void process(XPathContext context) throws XPathException { String effMessage = message.evaluateAsString(context); int effOrientation = 0; if (orientation != null) { String s = orientation.evaluateAsString(context); try { effOrientation = Integer.parseInt(s); effOrientation = BarcodeDimension.normalizeOrientation(effOrientation); } catch (NumberFormatException nfe) { throw new ValidationException(nfe); } catch (IllegalArgumentException iae) { throw new ValidationException(iae); } } try { SequenceReceiver out = context.getReceiver(); // Acquire BarcodeGenerator final BarcodeGenerator gen = BarcodeUtil.getInstance().createBarcodeGenerator(cfg); // Setup Canvas final SVGCanvasProvider svg; if (cfg.getAttributeAsBoolean("useNamespace", true)) { svg = new SVGCanvasProvider(cfg.getAttribute("prefix", "svg"), effOrientation); } else { svg = new SVGCanvasProvider(false, effOrientation); } // Generate barcode gen.generateBarcode(svg, effMessage); DocumentWrapper wrapper = new DocumentWrapper( svg.getDOM(), SVGCanvasProvider.SVG_NAMESPACE, context.getConfiguration()); out.append(wrapper, this.getLocationId(), 1); } catch (ConfigurationException ce) { throw new DynamicError("(Barcode4J) " + ce.getMessage()); } catch (BarcodeException be) { throw new DynamicError("(Barcode4J) " + be.getMessage()); } }