/*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
* Copyright (c) 2013, MPL CodeInside http://codeinside.ru
*/
package ru.codeinside.gws.core.cproto;
import com.sun.xml.ws.transport.http.client.HttpTransportPipe;
import org.junit.Assert;
import org.junit.Test;
import ru.codeinside.gws.api.Client;
import ru.codeinside.gws.api.ClientRequest;
import ru.codeinside.gws.api.ClientResponse;
import ru.codeinside.gws.api.Enclosure;
import ru.codeinside.gws.api.ExchangeContext;
import ru.codeinside.gws.api.InfoSystem;
import ru.codeinside.gws.api.ServerRequest;
import ru.codeinside.gws.api.ServerResponse;
import ru.codeinside.gws.core.sproto.R120315;
import ru.codeinside.gws.crypto.cryptopro.CryptoProvider;
import ru.codeinside.gws.s.oep.declarer.Declarer;
import ru.codeinside.gws.stubs.DeclarerContextStub;
import ru.codeinside.gws.stubs.DummyContext;
import ru.codeinside.gws.stubs.DummyReceiptContext;
import ru.codeinside.gws.stubs.DummyRequestContext;
import ru.codeinside.gws.stubs.R;
import ru.codeinside.gws.stubs.Support;
import ru.codeinside.gws.wsdl.ServiceDefinitionParser;
import ru.codeinside.gws.xml.normalizer.XmlNormalizerImpl;
import ru.codeinside.gws3970c.UniversalClient;
import javax.xml.soap.SOAPMessage;
import javax.xml.ws.BindingType;
import javax.xml.ws.Endpoint;
import javax.xml.ws.Service;
import javax.xml.ws.ServiceMode;
import javax.xml.ws.WebServiceProvider;
import javax.xml.ws.soap.SOAPBinding;
import javax.xml.ws.spi.Provider;
public class Rev120315Test extends Assert {
static {
R.init();
ClientRev120315.validate = false;// в универсальном клиенет cхема чуть не по СМЭВ.
ClientRev120315.dumping = false;
HttpTransportPipe.dump = false;
}
final static Support.PortDefinition mvvPort = Support.getServicePort("mvvact/mvvact.wsdl");
@Test
public void testPutData() throws Exception {
ServiceDefinitionParser definitionParser = new ServiceDefinitionParser();
CryptoProvider cryptoProvider = new CryptoProvider();
final int PORT = 7770;
final String PORT_ADDRES = "http://127.0.0.1:" + PORT + "/";
Adapter adapter = new Adapter(cryptoProvider);
Endpoint endpoint = Provider.provider().createEndpoint(null, adapter);
endpoint.publish(PORT_ADDRES);
try {
ClientRev120315 c120315 = new ClientRev120315(definitionParser, cryptoProvider,
new XmlNormalizerImpl(), null);
DummyContext context = new DummyContext();
context.setVariable("appData_FIO", "Иванов Иван Иванович");
context.setVariable("appData_birthDay", "12.01.1956");
context.setVariable("appData_addressRegister", "г Пенза улица Попова 36");
context.setVariable("appData_toOrganizationName", "Codeinside");
context.setVariable("appData_phone", "8908432422");
context.setVariable("flowName", "RegisterForImproveLivingArea");
context.setVariable("procedureCode", "123");
context.setVariable("app_id", 52L);
context.setVariable("smevRequestCode", 987);
context.addEnclosure("appData_e1", new Enclosure("e1.txt", "12345".getBytes()));
context.addEnclosure("appData_e2", new Enclosure("e2.txt", "54321".getBytes()));
UniversalClient client = new UniversalClient();
ClientRequest request = createRequest(PORT_ADDRES, client, context);
adapter.requestContext.procedureCode = 123L;
DeclarerContextStub dc = adapter.requestContext.declarerContext;
dc.id = "1234567";
adapter.requestContext.first = true;
ClientResponse response = c120315.send(client.getWsdlUrl(), request, null);
client.processClientResponse(response, context);
assertNull(adapter.requestContext.request.verifyResult.error);
assertTrue(dc.values.containsKey("appData_e1"));
assertTrue(dc.values.containsKey("appData_e2"));
DummyReceiptContext rc = new DummyReceiptContext();
rc.vars.put("x", "y");
rc.enclosures.put("z", new Enclosure("e3.txt", "14325".getBytes()));
adapter.requestContext.first = false;
adapter.requestContext.result = adapter.declarer.processResult("OK", rc);
request = createRequest(PORT_ADDRES, client, context);
response = c120315.send(client.getWsdlUrl(), request, null);
client.processClientResponse(response, context);
assertEquals("metadata", response.enclosureDescriptor);
assertEquals(2, response.enclosures.length);
assertEquals("metadata.xml", response.enclosures[0].zipPath);
assertEquals("e3.txt", response.enclosures[1].zipPath);
assertTrue(context.isEnclosure("z"));
} finally {
endpoint.stop();
}
}
private ClientRequest createRequest(String port, Client client, ExchangeContext ctx) {
ClientRequest request = client.createClientRequest(ctx);
request.portAddress = port;
request.packet.sender = request.packet.originator = new InfoSystem("PNZR01581", "Комплексная система предоставления государственных и муниципальных услуг Пензенской области");
return request;
}
//@SchemaValidation
@ServiceMode(Service.Mode.MESSAGE)
@WebServiceProvider(
targetNamespace = "http://mvv.oep.com/",
serviceName = "MVVActService", portName = "MVVActPort",
wsdlLocation = "mvvact/mvvact.wsdl")
@BindingType(value = SOAPBinding.SOAP11HTTP_MTOM_BINDING)
public class Adapter implements javax.xml.ws.Provider<SOAPMessage> {
final R120315 r120315;
final Declarer declarer = new Declarer();
final DummyRequestContext requestContext = new DummyRequestContext();
Adapter(CryptoProvider cryptoProvider) {
r120315 = new R120315(cryptoProvider, null, null);
}
@Override
public SOAPMessage invoke(SOAPMessage in) {
ServerRequest request = r120315.processRequest(in, mvvPort.service, mvvPort.portDef);
requestContext.request = request;
ServerResponse response = declarer.processRequest(requestContext);
SOAPMessage out = r120315.processResponse(request, response, mvvPort.service, mvvPort.portDef, null);
return out;
}
}
}