From 667af128d0adfeee2aa4748ab58411c91bc4905f Mon Sep 17 00:00:00 2001 From: mcentner Date: Tue, 26 Jan 2010 16:27:04 +0000 Subject: git-svn-id: https://joinup.ec.europa.eu/svn/mocca/branches/mocca-1.2.11-sha2@600 8a26b1a7-26f0-462f-b9ef-d0e30c41f5a4 --- .../service/impl/RequestBrokerSTALFactory.java | 45 --- .../egiz/stal/service/impl/STALRequestBroker.java | 41 --- .../stal/service/impl/STALRequestBrokerImpl.java | 324 ----------------- .../gv/egiz/stal/service/impl/STALServiceImpl.java | 386 --------------------- .../stal/service/impl/STALXJAXBContextFactory.java | 61 ---- .../egiz/stal/service/impl/TestSignatureData.java | 47 --- 6 files changed, 904 deletions(-) delete mode 100644 mocca-1.2.11/BKUOnline/src/main/java/at/gv/egiz/stal/service/impl/RequestBrokerSTALFactory.java delete mode 100644 mocca-1.2.11/BKUOnline/src/main/java/at/gv/egiz/stal/service/impl/STALRequestBroker.java delete mode 100644 mocca-1.2.11/BKUOnline/src/main/java/at/gv/egiz/stal/service/impl/STALRequestBrokerImpl.java delete mode 100644 mocca-1.2.11/BKUOnline/src/main/java/at/gv/egiz/stal/service/impl/STALServiceImpl.java delete mode 100644 mocca-1.2.11/BKUOnline/src/main/java/at/gv/egiz/stal/service/impl/STALXJAXBContextFactory.java delete mode 100644 mocca-1.2.11/BKUOnline/src/main/java/at/gv/egiz/stal/service/impl/TestSignatureData.java (limited to 'mocca-1.2.11/BKUOnline/src/main/java/at/gv/egiz/stal/service/impl') diff --git a/mocca-1.2.11/BKUOnline/src/main/java/at/gv/egiz/stal/service/impl/RequestBrokerSTALFactory.java b/mocca-1.2.11/BKUOnline/src/main/java/at/gv/egiz/stal/service/impl/RequestBrokerSTALFactory.java deleted file mode 100644 index 305d8c1c..00000000 --- a/mocca-1.2.11/BKUOnline/src/main/java/at/gv/egiz/stal/service/impl/RequestBrokerSTALFactory.java +++ /dev/null @@ -1,45 +0,0 @@ -/* -* Copyright 2008 Federal Chancellery Austria and -* Graz University of Technology -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -package at.gv.egiz.stal.service.impl; - -import java.util.Locale; - -import at.gv.egiz.stal.STAL; -import at.gv.egiz.stal.STALFactory; - -/** - * - * @author clemens - */ -public class RequestBrokerSTALFactory implements STALFactory { - - private static long timeout = -1; - - @Override - public STAL createSTAL() { - return new STALRequestBrokerImpl(timeout); - } - - @Override - public void setLocale(Locale locale) { - } - - public static void setTimeout(long millisec) { - timeout = millisec; - } -} diff --git a/mocca-1.2.11/BKUOnline/src/main/java/at/gv/egiz/stal/service/impl/STALRequestBroker.java b/mocca-1.2.11/BKUOnline/src/main/java/at/gv/egiz/stal/service/impl/STALRequestBroker.java deleted file mode 100644 index b77f7660..00000000 --- a/mocca-1.2.11/BKUOnline/src/main/java/at/gv/egiz/stal/service/impl/STALRequestBroker.java +++ /dev/null @@ -1,41 +0,0 @@ -/* -* Copyright 2008 Federal Chancellery Austria and -* Graz University of Technology -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -package at.gv.egiz.stal.service.impl; - -import at.gv.egiz.stal.HashDataInput; -import at.gv.egiz.stal.STAL; -import at.gv.egiz.stal.service.types.RequestType; -import at.gv.egiz.stal.service.types.ResponseType; -import java.util.List; -import javax.xml.bind.JAXBElement; - -/** - * - * @author clemens - */ -public interface STALRequestBroker extends STAL { - - public static final int ERR_4500 = 4500; - public static final long DEFAULT_TIMEOUT_MS = 1000*60*5; //5mn - - public List> connect(); - - public List> nextRequest(List> responses); - - public List getHashDataInput(); -} diff --git a/mocca-1.2.11/BKUOnline/src/main/java/at/gv/egiz/stal/service/impl/STALRequestBrokerImpl.java b/mocca-1.2.11/BKUOnline/src/main/java/at/gv/egiz/stal/service/impl/STALRequestBrokerImpl.java deleted file mode 100644 index a2447ab7..00000000 --- a/mocca-1.2.11/BKUOnline/src/main/java/at/gv/egiz/stal/service/impl/STALRequestBrokerImpl.java +++ /dev/null @@ -1,324 +0,0 @@ -/* - * Copyright 2008 Federal Chancellery Austria and - * Graz University of Technology - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package at.gv.egiz.stal.service.impl; - -import at.gv.egiz.stal.ErrorResponse; -import at.gv.egiz.stal.HashDataInput; -import at.gv.egiz.stal.QuitRequest; -import at.gv.egiz.stal.STALRequest; -import at.gv.egiz.stal.STALResponse; -import at.gv.egiz.stal.SignRequest; -import at.gv.egiz.stal.service.translator.STALTranslator; -import at.gv.egiz.stal.service.translator.TranslationException; -import at.gv.egiz.stal.service.types.ObjectFactory; -import at.gv.egiz.stal.service.types.QuitRequestType; -import at.gv.egiz.stal.service.types.RequestType; -import at.gv.egiz.stal.service.types.ResponseType; -import at.gv.egiz.stalx.service.translator.STALXTranslationHandler; -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; -import javax.xml.bind.JAXBElement; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; - -/** - * An instance of STALRequestBroker is shared between a producer thread (SLCommand) - * and multiple consumer threads (STALService). - * This implementation assures that handleRequest is executed only once the previous invocation returned. - * The BindingProcessor assures that a new SLCommand calls handleRequest() only once - * the bindingProcessor called handleRequest(QUIT) after the previous SLCommand's handleRequest() returned. - * - * Multiple STALService threads might call nextRequest()/getSignedReferences() in any order. - * - * @author clemens - */ -public class STALRequestBrokerImpl implements STALRequestBroker { - - private static final Log log = LogFactory.getLog(STALRequestBrokerImpl.class); - - private ObjectFactory of = new ObjectFactory(); - private STALTranslator translator = new STALTranslator(); - - private boolean interrupted = false; - - protected final ArrayList> requests; - protected final ArrayList> responses; - - protected ArrayList hashDataInputs; - - private long timeout; - - public STALRequestBrokerImpl(long timeoutMillisec) { - if (timeoutMillisec <= 0) - timeoutMillisec = DEFAULT_TIMEOUT_MS; - timeout = timeoutMillisec; - requests = new ArrayList>(); - responses = new ArrayList>(); - hashDataInputs = new ArrayList(); - - // register handler for STAL-X - translator.registerTranslationHandler(new STALXTranslationHandler()); - } - - /** - * Produce requests (and HashDataInputCallback) and wait for responses. - * This method is not thread safe, since every bindingprocessor thread possesses it's own instance. - * It however assures cooperation with STAL webservice threads consuming the requests and producing responses. - * - * @param requests - * @return - * - * @pre requests: either single SignRequest, QuitRequest or multiple ReadInfoboxRequests - */ - @Override - public List handleRequest(List stalRequests) { - if (interrupted) { - return null; - } - try { - synchronized (requests) { - log.trace("produce request"); - - requests.clear(); - hashDataInputs.clear(); - - for (STALRequest stalRequest : stalRequests) { - try { - JAXBElement request = translator.translate(stalRequest); - requests.add(request); - if (stalRequest instanceof SignRequest) { - //TODO refactor SignRequestType to keep HDI - // and getHashDataInput() accesses request obj - // (requests are cleared only when we receive the response) - // DataObjectHashDataInput with reference caching enabled DataObject - hashDataInputs.addAll(((SignRequest) stalRequest).getHashDataInput()); - } else if (stalRequest instanceof QuitRequest) { - log.trace("Received QuitRequest, do not wait for responses."); - log.trace("notifying request consumers"); - requests.notify(); - return new ArrayList(); - } - } catch (TranslationException ex) { - log.error(ex.getMessage() + ", send QUIT"); - requests.clear(); - QuitRequestType reqT = of.createQuitRequestType(); - JAXBElement req = of.createGetNextRequestResponseTypeQuitRequest(reqT); - requests.add(req); - log.trace("notifying request consumers"); - requests.notify(); - return new ArrayList(); - } - } - - -// if (stalRequest instanceof SignRequest) { -// log.trace("Received SignRequest, keep HashDataInput."); -// SignRequestType reqT = of.createSignRequestType(); -// reqT.setKeyIdentifier(((SignRequest) stalRequest).getKeyIdentifier()); -// reqT.setSignedInfo(((SignRequest) stalRequest).getSignedInfo()); -// JAXBElement req = of.createGetNextRequestResponseTypeSignRequest(reqT); -// requests.add(req); -// //DataObjectHashDataInput with reference caching enabled DataObject -// hashDataInputs.addAll(((SignRequest) stalRequest).getHashDataInput()); -// break; -// } else if (stalRequest instanceof InfoboxReadRequest) { -// log.trace("Received InfoboxReadRequest"); -// InfoboxReadRequestType reqT = new InfoboxReadRequestType(); -// reqT.setInfoboxIdentifier(((InfoboxReadRequest) stalRequest).getInfoboxIdentifier()); -// reqT.setDomainIdentifier(((InfoboxReadRequest) stalRequest).getDomainIdentifier()); -// JAXBElement req = of.createGetNextRequestResponseTypeInfoboxReadRequest(reqT); -// requests.add(req); -// } else if (stalRequest instanceof QuitRequest) { -// log.trace("Received QuitRequest, do not wait for responses."); -// QuitRequestType reqT = of.createQuitRequestType(); -// JAXBElement req = of.createGetNextRequestResponseTypeQuitRequest(reqT); -// requests.add(req); -// log.trace("notifying request consumers"); -// requests.notify(); -// return new ArrayList(); -// } else { -// log.error("Received unsupported STAL request: " + stalRequest.getClass().getName() + ", send QUIT"); -// requests.clear(); -// QuitRequestType reqT = of.createQuitRequestType(); -// JAXBElement req = of.createGetNextRequestResponseTypeQuitRequest(reqT); -// requests.add(req); -// log.trace("notifying request consumers"); -// requests.notify(); -// return new ArrayList(); -// } -// } - log.trace("notifying request consumers"); - requests.notify(); - } - - synchronized (responses) { - long beforeWait = System.currentTimeMillis(); - while (responses.isEmpty()) { - log.trace("waiting to consume response"); - responses.wait(timeout); - if (System.currentTimeMillis() - beforeWait >= timeout) { - log.warn("timeout while waiting to consume response, cleanup requests"); - requests.clear(); - hashDataInputs.clear(); - return Collections.singletonList((STALResponse) new ErrorResponse(ERR_4500)); - } - } - log.trace("consuming responses"); - List stalResponses = new ArrayList(); - try { - for (JAXBElement resp : responses) { - STALResponse stalResp = translator.translate(resp); - stalResponses.add(stalResp); - } - } catch (TranslationException ex) { - log.error(ex.getMessage() + ", return ErrorResponse (4000)"); - ErrorResponse stalResp = new ErrorResponse(4000); - stalResp.setErrorMessage(ex.getMessage()); - stalResponses = Collections.singletonList((STALResponse) stalResp); - } - - responses.clear(); - log.trace("notifying response producers"); - responses.notify(); - - return stalResponses; - } - } catch (InterruptedException ex) { - log.warn("interrupt in handleRequest(): " + ex.getMessage()); - interrupted = true; - return null; - } - } - - @Override - public List> connect() { - if (interrupted) { - return null; - } - try { - synchronized (requests) { - long beforeWait = System.currentTimeMillis(); - while (requests.isEmpty()) { - log.trace("waiting to consume request"); - requests.wait(timeout); - if (System.currentTimeMillis() - beforeWait >= timeout) { - log.warn("timeout while waiting to consume request"); - return createSingleQuitRequest(); - } - } - log.trace("don't consume request now, leave for further connect calls"); - return requests; - } - } catch (InterruptedException ex) { - log.warn("interrupt in nextRequest(): " + ex.getMessage()); - interrupted = true; - return null; - } - } - - /** - * This method is thread-safe, except for - * an 'initial' call to nextRequest(null) followed by a - * 'zombie' call to nextRequest(notNull). - * This case (per design) leads to a timeout of the original call. - * (synchronizing the entire method does not - * hinder the zombie to interrupt two consecutive nextRequest() calls.) - * - * @param responses - * @return QUIT if expected responses are not provided - */ - @Override - public List> nextRequest(List> resps) { - if (interrupted) { - return null; - } - try { - synchronized (requests) { - log.trace("received responses, now consume request"); - if (requests.size() != 0) { - requests.clear(); - } else { - log.warn("requests queue is empty, response might have already been produced previously "); - // return QUIT? - } - } - - synchronized (responses) { - if (resps != null && resps.size() > 0) { - long beforeWait = System.currentTimeMillis(); - while (!responses.isEmpty()) { - log.trace("waiting to produce response"); - responses.wait(timeout); - if (System.currentTimeMillis() - beforeWait >= timeout) { - log.warn("timeout while waiting to produce response"); - return createSingleQuitRequest(); - } - } - log.trace("produce response"); - responses.addAll(resps); - //reset HashDataInputCallback iff SignResponse - if (log.isTraceEnabled()) { - for (JAXBElement response : resps) { - log.trace("Received STAL response: " + response.getValue().getClass().getName()); - } - } - log.trace("notifying response consumers"); - responses.notify(); - } else { - log.error("Received NextRequest without responses, return QUIT"); - return createSingleQuitRequest(); - } - } - - synchronized (requests) { - long beforeWait = System.currentTimeMillis(); - while (requests.isEmpty()) { - log.trace("waiting to consume request"); - requests.wait(timeout); - if (System.currentTimeMillis() - beforeWait >= timeout) { - log.warn("timeout while waiting to consume request"); - return createSingleQuitRequest(); - } - } - log.trace("don't consume request now, but on next response delivery"); - return requests; - } - } catch (InterruptedException ex) { - log.warn("interrupt in nextRequest(): " + ex.getMessage()); - interrupted = true; - return null; - } - } - - @Override - public List getHashDataInput() { - synchronized (requests) { - log.trace("return " + hashDataInputs.size() + " current HashDataInput(s) "); - return hashDataInputs; - } - } - - private List> createSingleQuitRequest() { - QuitRequestType quitT = of.createQuitRequestType(); - JAXBElement quit = of.createGetNextRequestResponseTypeQuitRequest(quitT); - ArrayList> l = new ArrayList>(); - l.add(quit); - return l; - } -} diff --git a/mocca-1.2.11/BKUOnline/src/main/java/at/gv/egiz/stal/service/impl/STALServiceImpl.java b/mocca-1.2.11/BKUOnline/src/main/java/at/gv/egiz/stal/service/impl/STALServiceImpl.java deleted file mode 100644 index c8ab280f..00000000 --- a/mocca-1.2.11/BKUOnline/src/main/java/at/gv/egiz/stal/service/impl/STALServiceImpl.java +++ /dev/null @@ -1,386 +0,0 @@ - /* - * Copyright 2008 Federal Chancellery Austria and - * Graz University of Technology - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package at.gv.egiz.stal.service.impl; - -import at.buergerkarte.namespaces.cardchannel.service.CommandAPDUType; -import at.buergerkarte.namespaces.cardchannel.service.ScriptType; -import at.gv.egiz.bku.binding.BindingProcessor; -import at.gv.egiz.bku.binding.BindingProcessorManager; -import at.gv.egiz.bku.binding.Id; -import at.gv.egiz.bku.binding.IdFactory; - -import at.gv.egiz.stal.HashDataInput; -import at.gv.egiz.stal.service.GetHashDataInputFault; -import at.gv.egiz.stal.service.STALPortType; -import at.gv.egiz.stal.service.types.ErrorResponseType; -import at.gv.egiz.stal.service.types.GetHashDataInputFaultType; -import at.gv.egiz.stal.service.types.GetHashDataInputResponseType; -import at.gv.egiz.stal.service.types.GetHashDataInputType; -import at.gv.egiz.stal.service.types.GetNextRequestResponseType; -import at.gv.egiz.stal.service.types.GetNextRequestType; -import at.gv.egiz.stal.service.types.InfoboxReadRequestType; -import at.gv.egiz.stal.service.types.QuitRequestType; -import at.gv.egiz.stal.service.types.RequestType; -import at.gv.egiz.stal.service.types.ResponseType; -import at.gv.egiz.stal.service.types.SignRequestType; -import at.gv.egiz.stal.service.types.GetHashDataInputType.Reference; -//import at.gv.egiz.stal.service.types.GetHashDataInputResponseType.Reference; - -import com.sun.xml.ws.developer.UsesJAXBContext; -import java.io.ByteArrayOutputStream; -import java.io.IOException; -import java.io.InputStream; -import java.nio.charset.Charset; -import java.util.HashMap; -import java.util.Iterator; -import java.util.List; -import java.util.Map; -import javax.annotation.Resource; -import javax.jws.WebService; -import javax.servlet.ServletContext; -import javax.xml.bind.JAXBElement; -import javax.xml.ws.WebServiceContext; -import javax.xml.ws.handler.MessageContext; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; - -/** - * - * @author clemens - */ -@WebService(endpointInterface = "at.gv.egiz.stal.service.STALPortType", portName="STALPort", serviceName="STALService", targetNamespace="http://www.egiz.gv.at/wsdl/stal", wsdlLocation="WEB-INF/wsdl/stal.wsdl") -@UsesJAXBContext(STALXJAXBContextFactory.class) -public class STALServiceImpl implements STALPortType { - - public static final String BINDING_PROCESSOR_MANAGER = "bindingProcessorManager"; - public static final Id TEST_SESSION_ID = IdFactory.getInstance().createId("TestSession"); - protected static final Log log = LogFactory.getLog(STALServiceImpl.class); - - - static { - if (log.isTraceEnabled()) { - log.trace("enabling webservice communication dump"); - System.setProperty("com.sun.xml.ws.transport.http.HttpAdapter.dump", "true"); - } else { - System.setProperty("com.sun.xml.ws.fault.SOAPFaultBuilder.disableCaptureStackTrace", "false"); - } - } - @Resource - protected WebServiceContext wsContext; - protected IdFactory idF = IdFactory.getInstance(); - /** JAXB ObjectFactories */ - private at.gv.egiz.stal.service.types.ObjectFactory stalObjFactory = new at.gv.egiz.stal.service.types.ObjectFactory(); - /** don't confuse with at.buergerkarte.namespaces.cardchannel */ - private at.buergerkarte.namespaces.cardchannel.service.ObjectFactory ccObjFactory = new at.buergerkarte.namespaces.cardchannel.service.ObjectFactory(); - - @Override - public GetNextRequestResponseType connect(String sessId) { - - if (sessId == null) { - throw new NullPointerException("No session id provided"); - } - - Id sessionId = idF.createId(sessId); - - if (log.isDebugEnabled()) { - log.debug("Received Connect [" + sessionId + "]"); - } - - if (TEST_SESSION_ID.equals(sessionId)) { - return getTestSessionNextRequestResponse(null); - } - - GetNextRequestResponseType response = new GetNextRequestResponseType(); - response.setSessionId(sessionId.toString()); - - STALRequestBroker stal = getStal(sessionId); - - if (stal != null) { - - List> requestsOut = ((STALRequestBroker) stal).connect(); - response.getInfoboxReadRequestOrSignRequestOrQuitRequest().addAll(requestsOut); - - if (log.isDebugEnabled()) { - StringBuilder sb = new StringBuilder("Returning initial GetNextRequestResponse ["); - sb.append(sessionId.toString()); - sb.append("] containing "); - sb.append(requestsOut.size()); - sb.append(" requests: "); - for (JAXBElement reqOut : requestsOut) { - sb.append(reqOut.getValue().getClass()); - sb.append(' '); - } - log.debug(sb.toString()); - } - } else { - log.error("Failed to get STAL for session " + sessionId + ", returning QuitRequest"); - QuitRequestType quitT = stalObjFactory.createQuitRequestType(); - JAXBElement quit = stalObjFactory.createGetNextRequestResponseTypeQuitRequest(quitT); - response.getInfoboxReadRequestOrSignRequestOrQuitRequest().add(quit); - } - return response; - } - - @Override - public GetNextRequestResponseType getNextRequest(GetNextRequestType request) { - - if (request.getSessionId() == null) { - throw new NullPointerException("No session id provided"); - } - - Id sessionId = idF.createId(request.getSessionId()); - - List> responsesIn = request.getInfoboxReadResponseOrSignResponseOrErrorResponse(); -// List responsesIn = request.getInfoboxReadResponseOrSignResponseOrErrorResponse();//getResponse(); - - if (log.isDebugEnabled()) { - StringBuilder sb = new StringBuilder("Received GetNextRequest ["); - sb.append(sessionId.toString()); - sb.append("] containing "); - sb.append(responsesIn.size()); - sb.append(" responses: "); - for (JAXBElement respIn : responsesIn) { - sb.append(respIn.getValue().getClass()); - sb.append(' '); - } - log.debug(sb.toString()); - } - - if (TEST_SESSION_ID.equals(sessionId)) { - return getTestSessionNextRequestResponse(responsesIn); - } - - GetNextRequestResponseType response = new GetNextRequestResponseType(); - response.setSessionId(sessionId.toString()); - - STALRequestBroker stal = getStal(sessionId); - - if (stal != null) { - - List> requestsOut = ((STALRequestBroker) stal).nextRequest(responsesIn); - response.getInfoboxReadRequestOrSignRequestOrQuitRequest().addAll(requestsOut); - - if (log.isDebugEnabled()) { - StringBuilder sb = new StringBuilder("Returning GetNextRequestResponse ["); - sb.append(sessionId.toString()); - sb.append("] containing "); - sb.append(requestsOut.size()); - sb.append(" requests: "); - for (JAXBElement reqOut : requestsOut) { - sb.append(reqOut.getValue().getClass()); - sb.append(' '); - } - log.debug(sb.toString()); - } - } else { - log.error("Failed to get STAL for session " + sessionId + ", returning QuitRequest"); - QuitRequestType quitT = stalObjFactory.createQuitRequestType(); - JAXBElement quit = stalObjFactory.createGetNextRequestResponseTypeQuitRequest(quitT); - response.getInfoboxReadRequestOrSignRequestOrQuitRequest().add(quit); - } - return response; - } - - @Override - public GetHashDataInputResponseType getHashDataInput(GetHashDataInputType request) throws GetHashDataInputFault { - - if (request.getSessionId() == null) { - throw new NullPointerException("No session id provided"); - } - - Id sessionId = idF.createId(request.getSessionId()); - - if (log.isDebugEnabled()) { - log.debug("Received GetHashDataInputRequest for session " + sessionId + " containing " + request.getReference().size() + " reference(s)"); - } - - if (TEST_SESSION_ID.equals(sessionId)) { - return getTestSessionHashDataInputResponse(request.getReference()); - } - - GetHashDataInputResponseType response = new GetHashDataInputResponseType(); - response.setSessionId(sessionId.toString()); - - STALRequestBroker stal = getStal(sessionId); - - if (stal != null) { - List hashDataInputs = stal.getHashDataInput(); - - if (hashDataInputs != null) { - - Map hashDataIdMap = new HashMap(); - for (HashDataInput hdi : hashDataInputs) { - if (log.isTraceEnabled()) { - log.trace("Provided HashDataInput for reference " + hdi.getReferenceId()); - } - hashDataIdMap.put(hdi.getReferenceId(), hdi); - } - - List reqRefs = request.getReference(); - for (GetHashDataInputType.Reference reqRef : reqRefs) { - String reqRefId = reqRef.getID(); - HashDataInput reqHdi = hashDataIdMap.get(reqRefId); - if (reqHdi == null) { - String msg = "Failed to resolve HashDataInput for reference " + reqRefId; - log.error(msg); - GetHashDataInputFaultType faultInfo = new GetHashDataInputFaultType(); - faultInfo.setErrorCode(1); - faultInfo.setErrorMessage(msg); - throw new GetHashDataInputFault(msg, faultInfo); - } - - InputStream hashDataIS = reqHdi.getHashDataInput(); - if (hashDataIS == null) { - //HashDataInput not cached? - String msg = "Failed to obtain HashDataInput for reference " + reqRefId + ", reference not cached"; - log.error(msg); - GetHashDataInputFaultType faultInfo = new GetHashDataInputFaultType(); - faultInfo.setErrorCode(1); - faultInfo.setErrorMessage(msg); - throw new GetHashDataInputFault(msg, faultInfo); - } - ByteArrayOutputStream baos = null; - try { - if (log.isDebugEnabled()) { - log.debug("Resolved HashDataInput " + reqRefId + " (" + reqHdi.getMimeType() + ";charset=" + reqHdi.getEncoding() + ")"); - } - baos = new ByteArrayOutputStream(hashDataIS.available()); - int c; - while ((c = hashDataIS.read()) != -1) { - baos.write(c); - } - GetHashDataInputResponseType.Reference ref = new GetHashDataInputResponseType.Reference(); - ref.setID(reqRefId); - ref.setMimeType(reqHdi.getMimeType()); - ref.setEncoding(reqHdi.getEncoding()); - ref.setFilename(reqHdi.getFilename()); - ref.setValue(baos.toByteArray()); - response.getReference().add(ref); - } catch (IOException ex) { - String msg = "Failed to get HashDataInput for reference " + reqRefId; - log.error(msg, ex); - GetHashDataInputFaultType faultInfo = new GetHashDataInputFaultType(); - faultInfo.setErrorCode(1); - faultInfo.setErrorMessage(msg); - throw new GetHashDataInputFault(msg, faultInfo, ex); - } finally { - try { - baos.close(); - } catch (IOException ex) { - } - } - } - return response; - } else { - String msg = "Failed to resolve any HashDataInputs for session " + sessionId; - log.error(msg); - GetHashDataInputFaultType faultInfo = new GetHashDataInputFaultType(); - faultInfo.setErrorCode(1); - faultInfo.setErrorMessage(msg); - throw new GetHashDataInputFault(msg, faultInfo); - } - } else { - String msg = "Session timeout"; //Failed to get STAL for session " + sessionId; - log.error(msg + " " + sessionId); - GetHashDataInputFaultType faultInfo = new GetHashDataInputFaultType(); - faultInfo.setErrorCode(1); - faultInfo.setErrorMessage(msg); - throw new GetHashDataInputFault(msg, faultInfo); - } - } - - private STALRequestBroker getStal(Id sessionId) { - if (log.isTraceEnabled()) { - log.trace("resolve STAL for session " + sessionId); - } - MessageContext mCtx = wsContext.getMessageContext(); - ServletContext sCtx = (ServletContext) mCtx.get(MessageContext.SERVLET_CONTEXT); - BindingProcessorManager bpMgr = (BindingProcessorManager) sCtx.getAttribute(BINDING_PROCESSOR_MANAGER); - BindingProcessor bp = bpMgr.getBindingProcessor(sessionId); - return (bp == null) ? null : (bp.isFinished() ? null : (STALRequestBroker) bp.getSTAL()); - } - - private GetNextRequestResponseType getTestSessionNextRequestResponse(List> responsesIn) { - GetNextRequestResponseType response = new GetNextRequestResponseType(); - response.setSessionId(TEST_SESSION_ID.toString()); - - List> reqs = response.getInfoboxReadRequestOrSignRequestOrQuitRequest(); - - if (responsesIn == null) { - log.info("[TestSession] CONNECT"); -// addTestCardChannelRequest(reqs); -// addTestInfoboxReadRequest("IdentityLink", reqs); -// addTestInfoboxReadRequest("SecureSignatureKeypair", reqs); -// addTestInfoboxReadRequest("CertifiedKeypair", reqs); - addTestSignatureRequests("SecureSignatureKeypair", reqs); - } else if (responsesIn != null && responsesIn.size() > 0 && responsesIn.get(0).getValue() instanceof ErrorResponseType) { - log.info("[TestSession] received ErrorResponse, return QUIT request"); - QuitRequestType quitT = stalObjFactory.createQuitRequestType(); - reqs.add(stalObjFactory.createGetNextRequestResponseTypeQuitRequest(quitT)); - } else { - log.info("[TestSession] received " + responsesIn.size() + " response(s), return QUIT" ); - QuitRequestType quitT = stalObjFactory.createQuitRequestType(); - reqs.add(stalObjFactory.createGetNextRequestResponseTypeQuitRequest(quitT)); - } - return response; - } - - - private GetHashDataInputResponseType getTestSessionHashDataInputResponse(List references) { - log.debug("[TestSession] received GET_HASHDATAINPUT"); - - GetHashDataInputResponseType response = new GetHashDataInputResponseType(); - response.setSessionId(TEST_SESSION_ID.toString()); - - for (Reference reference : references) { - String refId = reference.getID(); - log.debug("[TestSession] adding hashdata input for " + refId); - GetHashDataInputResponseType.Reference ref = new GetHashDataInputResponseType.Reference(); - ref.setID(refId); - ref.setMimeType(TestSignatureData.HASHDATA_MIMETYPES.get(refId)); //todo resolve from TestSignatureData - ref.setValue(TestSignatureData.HASHDATA_INPUT.get(refId)); - ref.setEncoding(TestSignatureData.ENCODING); - response.getReference().add(ref); - } - return response; - } - - private void addTestCardChannelRequest(List> requestList) { - log.info("[TestSession] add CARDCHANNEL request"); - ScriptType scriptT = ccObjFactory.createScriptType(); - CommandAPDUType cmd = ccObjFactory.createCommandAPDUType(); - cmd.setValue("TestSession CardChannelCMD 1234".getBytes()); - scriptT.getResetOrCommandAPDUOrVerifyAPDU().add(cmd); - requestList.add(ccObjFactory.createScript(scriptT)); - } - - private void addTestInfoboxReadRequest(String infoboxIdentifier, List> requestList) { - log.info("[TestSession] add READ "+ infoboxIdentifier + " request"); - InfoboxReadRequestType ibrT = stalObjFactory.createInfoboxReadRequestType(); - ibrT.setInfoboxIdentifier(infoboxIdentifier); - requestList.add(stalObjFactory.createGetNextRequestResponseTypeInfoboxReadRequest(ibrT)); - } - - private void addTestSignatureRequests(String keyIdentifier, List> reqs) { - log.info("[TestSession] add SIGN " + keyIdentifier + " request"); - SignRequestType sigT = stalObjFactory.createSignRequestType(); - sigT.setKeyIdentifier(keyIdentifier); - sigT.setSignedInfo(TestSignatureData.SIGNED_INFO.get(1)); //select! - reqs.add(stalObjFactory.createGetNextRequestResponseTypeSignRequest(sigT)); - } - -} diff --git a/mocca-1.2.11/BKUOnline/src/main/java/at/gv/egiz/stal/service/impl/STALXJAXBContextFactory.java b/mocca-1.2.11/BKUOnline/src/main/java/at/gv/egiz/stal/service/impl/STALXJAXBContextFactory.java deleted file mode 100644 index 9caf950f..00000000 --- a/mocca-1.2.11/BKUOnline/src/main/java/at/gv/egiz/stal/service/impl/STALXJAXBContextFactory.java +++ /dev/null @@ -1,61 +0,0 @@ -/* - * Copyright 2008 Federal Chancellery Austria and - * Graz University of Technology - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package at.gv.egiz.stal.service.impl; - -import com.sun.xml.bind.api.JAXBRIContext; -import com.sun.xml.bind.api.TypeReference; -import com.sun.xml.ws.api.model.SEIModel; -import com.sun.xml.ws.developer.JAXBContextFactory; -import java.util.ArrayList; -import java.util.List; -import javax.xml.bind.JAXBException; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; - -/** - * - * @author Clemens Orthacker - */ -public class STALXJAXBContextFactory implements JAXBContextFactory { - - private static final Log log = LogFactory.getLog(STALXJAXBContextFactory.class); - - @Override - public JAXBRIContext createJAXBContext(SEIModel sei, List classesToBind, List typeReferences) throws JAXBException { - if (log.isTraceEnabled()) { - log.trace("JAXBContext seed for SEI " + sei.getTargetNamespace() + ":"); - for (Class class1 : classesToBind) { - log.trace(" " + class1); - } - for (TypeReference typeReference : typeReferences) { - log.trace(" typeRef " + typeReference.tagName + " -> " + typeReference.type); - } - } - List classes = new ArrayList(); - classes.addAll(classesToBind); - Class ccOF = at.buergerkarte.namespaces.cardchannel.service.ObjectFactory.class; - if (!classes.contains(ccOF)) { - log.debug("adding " + ccOF + " to JAXBContext seed"); - classes.add(ccOF); - } - - //TODO add typeReference? - - return JAXBRIContext.newInstance(classes.toArray(new Class[classes.size()]), - typeReferences, null, sei.getTargetNamespace(), false, null); - } -} diff --git a/mocca-1.2.11/BKUOnline/src/main/java/at/gv/egiz/stal/service/impl/TestSignatureData.java b/mocca-1.2.11/BKUOnline/src/main/java/at/gv/egiz/stal/service/impl/TestSignatureData.java deleted file mode 100644 index 2f58bb3d..00000000 --- a/mocca-1.2.11/BKUOnline/src/main/java/at/gv/egiz/stal/service/impl/TestSignatureData.java +++ /dev/null @@ -1,47 +0,0 @@ -package at.gv.egiz.stal.service.impl; - -import java.io.UnsupportedEncodingException; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; - -public final class TestSignatureData { - - protected final static Log log = LogFactory.getLog(TestSignatureData.class); - - public static final String[] ID = new String[] {"signed-data-reference-0-1214921968-27971781-24309", "signed-data-reference-1"}; - public static final String ENCODING = "UTF-8"; - - public static final Map HASHDATA_INPUT = new HashMap(); - static { - try { - HASHDATA_INPUT.put(ID[0], "Ich bin ein einfacher Text. lläöü߀".getBytes(ENCODING)); - HASHDATA_INPUT.put(ID[1], "2te referenz".getBytes(ENCODING)); - } catch (UnsupportedEncodingException ex) { - log.error("failed to init signature test data", ex); - } - } - public static final Map HASHDATA_MIMETYPES = new HashMap(); - static { - HASHDATA_MIMETYPES.put(ID[0], "text/plain"); - HASHDATA_MIMETYPES.put(ID[1], "any/mime-type"); - } - -// private static final byte[] signedInfo = " id('signed-data-object-0-1214921968-27971781-13578')/node() H1IePEEfGQ2SG03H6LTzw1TpCuM=yV6Q+I60buqR4mMaxA7fi+CV35A=".getBytes(); -// private static final byte[] signedInfo2Ref = " id('signed-data-object-0-1214921968-27971781-13578')/node() H1IePEEfGQ2SG03H6LTzw1TpCuM= id('signed-data-object-1')/node() H1IePEEfGQ2SG03H6LTzw1TpCuM=yV6Q+I60buqR4mMaxA7fi+CV35A=".getBytes(); -// private static final String signedInfo2Ref = " id('signed-data-object-1')/node() H1IePEEfGQ2SG03H6LTzw1TpCuM="; - /** - * SIGNED_INFO[0] contains reference ID[0] - * SIGNED_INFO[1] contains reference ID[0] and ID[1] - */ - public static final List SIGNED_INFO = new ArrayList(); - static { - SIGNED_INFO.add(" id('signed-data-object-0-1214921968-27971781-13578')/node() H1IePEEfGQ2SG03H6LTzw1TpCuM=yV6Q+I60buqR4mMaxA7fi+CV35A=".getBytes()); - SIGNED_INFO.add(" id('signed-data-object-0-1214921968-27971781-13578')/node() H1IePEEfGQ2SG03H6LTzw1TpCuM= id('signed-data-object-1')/node() H1IePEEfGQ2SG03H6LTzw1TpCuM=yV6Q+I60buqR4mMaxA7fi+CV35A=".getBytes()); - } - -} -- cgit v1.2.3