helixiao 11 ماه پیش
والد
کامیت
0aa2046e37

+ 1 - 0
tenant/insurance/quotation-commons/src/main/java/com/jzg/quotation/commons/component/RequestComponent.java

@@ -25,6 +25,7 @@ import java.nio.charset.StandardCharsets;
 import java.nio.file.Files;
 import java.nio.file.Paths;
 import java.nio.file.StandardOpenOption;
+import java.util.List;
 import java.util.Map;
 import java.util.Optional;
 import java.util.function.Consumer;

+ 107 - 1
tenant/insurance/quotation-huatai/src/main/java/com/jzg/quotation/huatai/crawler/component/HtCrawlerRequestComponent.java

@@ -17,7 +17,13 @@ import org.redisson.api.RedissonClient;
 import org.springframework.http.HttpHeaders;
 import org.springframework.http.ResponseEntity;
 import org.springframework.stereotype.Component;
+import org.springframework.web.reactive.function.client.ClientResponse;
+import org.springframework.web.reactive.function.client.WebClient;
+import reactor.core.publisher.Mono;
 
+import java.io.IOException;
+import java.net.HttpURLConnection;
+import java.net.URL;
 import java.time.Duration;
 import java.util.HashMap;
 import java.util.List;
@@ -48,12 +54,14 @@ public class HtCrawlerRequestComponent {
      * @return
      */
     public List<String> authenticate(String username, String password, String comcode, int loginsNumber) {
+        List<String> haTaiCookie = getHaTaiCookie(RequestUrl.COOKIE.getRequestUrl(huaTaiCrawlerProperties.getBaseUrl()));
+        System.out.println(haTaiCookie);
         HtCrawlerLoginRequest htCrawlerLoginRequest = new HtCrawlerLoginRequest(username, password, comcode);
         ResponseEntity<HtCrawlerLoginResponse> loginResponseEntity = requestComponent.objectPost(RequestUrl.AUTHENTICATE.getRequestUrl(huaTaiCrawlerProperties.getBaseUrl()), htCrawlerLoginRequest, HtCrawlerLoginResponse.class);
         List<String> cookies = loginResponseEntity.getHeaders().get("Set-Cookie");
         if (cookies != null && !cookies.isEmpty()) {
             Map<String, Object> authorizationMap = buildCache(loginResponseEntity);
-            RMap<Object, Object> map = redissonClient.getMap(CacheConstant.HENGBANG_AUTHORIZATION + username);
+            RMap<Object, Object> map = redissonClient.getMap(CacheConstant.HUATAI_AUTHORIZATION + username);
             map.putAll(authorizationMap);
             map.expire(Duration.ofDays(CacheConstant.GR_SPECIAL_AGREEMENT_TIME));
             return (List<String>) authorizationMap.get(HtRequestConstant.COOKIE);
@@ -81,6 +89,104 @@ public class HtCrawlerRequestComponent {
         return (List<String>) redissonClient.getMap(CacheConstant.HUATAI_AUTHORIZATION + username).get(HtRequestConstant.COOKIE);
     }
 
+    public List<String>  getHaTaiCookie(String link) {
+//        try {
+//            // 请求头设置
+//            String[] headers = {
+//                    "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7",
+//                    "Accept-Language: zh-CN,zh;q=0.9,en;q=0.8",
+//                    "Cache-Control: no-cache",
+//                    "Connection: keep-alive",
+//                    "Pragma: no-cache",
+//                    "Upgrade-Insecure-Requests: 1",
+//                    "User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36"
+//            };
+//            // 创建URL对象
+//            URL url = new URL(link);
+//
+//            // 打开连接
+//            HttpURLConnection connection = (HttpURLConnection) url.openConnection();
+//
+//            // 设置请求方法为GET
+//            connection.setRequestMethod("GET");
+//            // 添加请求头
+//            for (String header : headers) {
+//                String[] parts = header.split(":", 2);
+//                if (parts.length == 2) {
+//                    connection.setRequestProperty(parts[0].trim(), parts[1].trim());
+//                }
+//            }
+//
+//            // 获取响应码
+//            int responseCode = connection.getResponseCode();
+//            System.out.println("响应码: " + responseCode);
+//
+//            // 获取所有响应头
+//            Map<String, List<String>> headersList = connection.getHeaderFields();
+//
+//            // 检查并获取Cookie
+//            if (headersList.containsKey("Set-Cookie")) {
+//                List<String> cookies = headersList.get("Set-Cookie");
+//                System.out.println("获取到的Cookie:");
+//                for (String cookie : cookies) {
+//                    System.out.println(cookie);
+//                }
+//            } else {
+//                System.out.println("响应头中没有找到Cookie");
+//            }
+//
+//            // 关闭连接
+//            connection.disconnect();
+//
+//        } catch (IOException e) {
+//            System.err.println("请求过程中发生错误: " + e.getMessage());
+//            e.printStackTrace();
+//        }
+
+        // 创建WebClient实例
+        WebClient webClient = WebClient.create();
+
+        // 发送GET请求,获取完整响应(包括响应头)
+        Mono<ClientResponse> responseMono = webClient.get()
+                .uri(link)
+                .header("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7")
+                .header("Accept-Language", "zh-CN,zh;q=0.9,en;q=0.8")
+                .header("Cache-Control", "no-cache")
+                .header("Connection", "keep-alive")
+                .header("Pragma", "no-cache")
+                .header("Upgrade-Insecure-Requests", "1")
+                .header("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36")
+                .exchangeToMono(response -> Mono.just(response));
+
+        // 阻塞获取完整响应
+        ClientResponse response = responseMono.block();
+
+        if (response != null) {
+            // 获取响应状态码
+            System.out.println("响应状态码: " + response.statusCode());
+
+            // 获取响应头中的Cookie
+            HttpHeaders headers = response.headers().asHttpHeaders();
+            List<String> cookies = headers.get("Set-Cookie");
+
+            if (cookies != null && !cookies.isEmpty()) {
+                System.out.println("获取到的Cookie:");
+                for (String cookie : cookies) {
+                    System.out.println(cookie);
+                }
+                return cookies;
+            } else {
+                System.out.println("响应头中没有Cookie");
+            }
+
+            // 读取响应体
+            String responseBody = response.bodyToMono(String.class).block();
+            System.out.println("\n响应体内容: " + responseBody);
+        }
+
+        return null;
+    }
+
     /**
      * 获取请求头
      * @return

+ 2 - 0
tenant/insurance/quotation-huatai/src/main/java/com/jzg/quotation/huatai/crawler/constant/enums/RequestUrl.java

@@ -12,6 +12,8 @@ import lombok.Getter;
 @AllArgsConstructor
 @Getter
 public enum RequestUrl implements CrawlerRequestUrlStandard {
+
+    COOKIE("/htcsp/", "获取cookie"),
     AUTHENTICATE("/htcsp/ShakeHandsAction.do?cmd=loginWelcom", "登录"),
 
     CAR_QUERY("/htcsp/VehicleInfoEntryAction.do?cmd=carquery", "车型查询"),

+ 33 - 0
tenant/insurance/quotation-huatai/src/main/java/com/jzg/quotation/huatai/crawler/entity/vo/LoginVPNResult.java

@@ -0,0 +1,33 @@
+package com.jzg.quotation.huatai.crawler.entity.vo;
+
+import lombok.Data;
+
+import java.io.Serial;
+
+@Data
+public class LoginVPNResult {
+
+    @Serial
+    private static final long serialVersionUID = -1L;
+    private boolean success;
+    private String errorMessage;
+    private String sessionInfo;
+
+    public LoginVPNResult(boolean success, String errorMessage, String sessionInfo) {
+        this.success = success;
+        this.errorMessage = errorMessage;
+        this.sessionInfo = sessionInfo;
+    }
+
+    public boolean isSuccess() {
+        return success;
+    }
+
+    public String getErrorMessage() {
+        return errorMessage;
+    }
+
+    public String getSessionInfo() {
+        return sessionInfo;
+    }
+}

+ 17 - 0
tenant/insurance/quotation-huatai/src/main/java/com/jzg/quotation/huatai/crawler/service/Impl/HuaTaiCrawlerRequestImpl.java

@@ -21,12 +21,14 @@ import com.jzg.quotation.huatai.crawler.entity.Request.*;
 import com.jzg.quotation.huatai.crawler.entity.Response.*;
 import com.jzg.quotation.huatai.crawler.entity.dto.LoginDTO;
 import com.jzg.quotation.huatai.crawler.entity.po.HtCrawlerOrder;
+import com.jzg.quotation.huatai.crawler.entity.vo.LoginVPNResult;
 import com.jzg.quotation.huatai.crawler.service.HtCrawlerOrderService;
 import com.jzg.quotation.huatai.crawler.service.HuaTaiCrawlerRequest;
 import lombok.RequiredArgsConstructor;
 import org.jsoup.Jsoup;
 import org.jsoup.nodes.Document;
 import org.jsoup.select.Elements;
+import org.springframework.beans.factory.annotation.Value;
 import org.springframework.http.HttpHeaders;
 
 import java.io.File;
@@ -47,6 +49,15 @@ public class HuaTaiCrawlerRequestImpl implements HuaTaiCrawlerRequest {
 
     private final HtCrawlerOrderService htCrawlerOrderService;
 
+    @Value("${huatai.api.username}")
+    private String username;
+
+    @Value("${huatai.api.password}")
+    private String password;
+
+    @Value("${huatai.api.comcode}")
+    private String comcode;
+
     /**
      * 登录
      *
@@ -73,6 +84,12 @@ public class HuaTaiCrawlerRequestImpl implements HuaTaiCrawlerRequest {
      */
     @Override
     public QuoteResultsVo quote(QuoteVo quoteVo) throws JsonProcessingException {
+        LoginDTO loginDTO = new LoginDTO();
+        loginDTO.setComcode(comcode);
+        loginDTO.setUsername(username);
+        loginDTO.setPassword(password);
+        login(loginDTO);
+
         CarInfoVo carInfoVo = quoteVo.getCarInfoVo();
         AttributionInformationVo attributionInformationVo = quoteVo.getOrder().getAttributionInformationVo();
         //获取配置信息

+ 3 - 0
tenant/insurance/quotation-summary/src/main/resources/application-dev.yaml

@@ -126,6 +126,9 @@ huatai:
     huaTaiKey: AdOdn409KE6Z9XvFsJ
     key: kFl5aiHALbZ6TMTqQDxghMMC
     tokenUrl: https://vehpxy.pc.ehuatai.com/sign
+    username: "UE27017723VPN01"
+    password: "Dhbx135....."
+    comcode: "9270901-营业部代理业务一部"
 # 渤海财险生产api
 bohai:
   api:

+ 142 - 142
tenant/insurance/quotation-zhongan/src/test/java/com/jzg/quotation/zhongan/crawler/service/ZhongAnAPIServiceTest.java

@@ -1,142 +1,142 @@
-package com.jzg.quotation.zhongan.crawler.service;
-
-import com.jzg.quotation.commons.component.RequestComponent;
-import com.jzg.quotation.zhongan.crawler.model.entity.ZhongAnBizDocumentInfo;
-import com.jzg.quotation.zhongan.crawler.model.result.ZhongAnQueryCarInfoResult;
-import com.jzg.quotation.zhongan.crawler.model.result.ZhongAnQueryDocumentInfoResult;
-import com.jzg.quotation.zhongan.crawler.model.result.ZhongAnQueryPolicyDetailResult;
-import io.netty.channel.ChannelOption;
-import io.netty.handler.ssl.SslContextBuilder;
-import io.netty.handler.ssl.util.InsecureTrustManagerFactory;
-import io.netty.handler.timeout.ReadTimeoutHandler;
-import io.netty.handler.timeout.WriteTimeoutHandler;
-import org.junit.jupiter.api.BeforeAll;
-import org.junit.jupiter.api.Test;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.http.HttpHeaders;
-import org.springframework.http.MediaType;
-import org.springframework.http.client.reactive.ReactorClientHttpConnector;
-import org.springframework.web.reactive.function.client.ExchangeFilterFunction;
-import org.springframework.web.reactive.function.client.WebClient;
-import reactor.core.publisher.Mono;
-import reactor.netty.http.client.HttpClient;
-import reactor.netty.resources.ConnectionProvider;
-
-import java.time.Duration;
-import java.util.List;
-import java.util.Map;
-
-import static org.junit.jupiter.api.Assertions.assertNotNull;
-
-public class ZhongAnAPIServiceTest {
-    private static final Logger logger = LoggerFactory.getLogger(ZhongAnAPIServiceTest.class);
-
-    private static ZhongAnAPIService zhongAnAPIService;
-
-
-    @BeforeAll
-    public static void before() {
-        // 启用SSL调试(查看握手过程)
-        //System.setProperty("javax.net.debug", "ssl:handshake");
-
-        // 配置HTTP连接池
-        ConnectionProvider connectionProvider = ConnectionProvider
-                .builder("http")
-                .maxConnections(500)
-                .maxIdleTime(Duration.ofSeconds(30))
-                .build();
-
-        // 配置HTTP客户端
-        HttpClient httpClient = reactor.netty.http.client.HttpClient
-                .create(connectionProvider)
-                .secure(ssl -> ssl.sslContext(
-                        SslContextBuilder.forClient()
-                                .trustManager(InsecureTrustManagerFactory.INSTANCE)
-                ))
-                .option(ChannelOption.CONNECT_TIMEOUT_MILLIS, 5000)
-                .responseTimeout(Duration.ofSeconds(50))
-                .doOnConnected(conn ->
-                        conn.addHandlerLast(new ReadTimeoutHandler(50)).addHandlerLast(new WriteTimeoutHandler(50)));
-
-        WebClient.builder()
-                .clientConnector(new ReactorClientHttpConnector(httpClient))
-                .build();
-        // 构建WebClient实例
-        WebClient webClient = WebClient
-                .builder()
-                .clientConnector(new ReactorClientHttpConnector(httpClient))
-                .defaultHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON_VALUE)
-                .defaultHeader(HttpHeaders.ACCEPT, MediaType.APPLICATION_JSON_VALUE)
-                .filter(ExchangeFilterFunction.ofRequestProcessor(
-                        clientRequest -> {
-                            // 打印请求头信息
-                            clientRequest
-                                    .headers()
-                                    .forEach((key, values) -> {
-                                        logger.info("请求头: {}: {}", key, values);
-                                    });
-                            return Mono.just(clientRequest);
-                        }
-                ))
-                .codecs(item->item.defaultCodecs().maxInMemorySize(10 * 1024 * 1024))
-                .build();
-
-
-        RequestComponent requestComponent = new RequestComponent(webClient);
-
-        zhongAnAPIService = new ZhongAnAPIService();
-        zhongAnAPIService.setRequestComponent(requestComponent);
-
-
-        //ChengTaiAPIHelper.initAPI("https://b2b.champion-ic.com");
-    }
-
-
-    @Test
-    public void queryDocumentInfo() {
-        String token = "zaLoginCookieKey=9b902b0ec92581f51587ce2a9da7019ec8f9582b1a43c0f437b9566049b486c2;";
-        ZhongAnQueryDocumentInfoResult zhongAnQueryDocumentInfoResult = zhongAnAPIService.queryDocumentInfo(token, "291e19533f8ee5b20d8eaf64ec4f43b5");
-
-        assertNotNull(zhongAnQueryDocumentInfoResult);
-
-        List<ZhongAnBizDocumentInfo> bizDocumentInfo = zhongAnQueryDocumentInfoResult.getBizDocumentInfo();
-
-        for (ZhongAnBizDocumentInfo bizDocument : bizDocumentInfo) {
-            String url = "https://c.zhongan.com/open/bmw/n/query_controller/downloadDocument.json?orderNo=%s&fileName=%s&documentUrl=%s".formatted("291e19533f8ee5b20d8eaf64ec4f43b5",bizDocument.getDocumentName(), bizDocument.getDocumentUrl());
-
-            System.out.println(url);
-        }
-    }
-
-    @Test
-    public void queryPolicyDetail() {
-        String token = "zaLoginCookieKey=9b902b0ec92581f51587ce2a9da7019ec8f9582b1a43c0f437b9566049b486c2;";
-        String policyId = "bd162dd1260519fc39aa446aee32d9ab";
-
-        ZhongAnQueryPolicyDetailResult result = zhongAnAPIService.queryPolicyDetail(token, policyId);
-
-        assertNotNull(result);
-
-        String policyStatus = result.getDatas().getPolicy().getVehiclePolicyDTO().getPolicyStatus();
-        String policyStatusText = result.getDatas().getPolicy().getVehiclePolicyDTO().getPolicyStatusText();
-
-        System.out.println(policyStatus);
-        System.out.println(policyStatusText);
-    }
-
-    @Test
-    public void queryCarInfo() {
-        String token = "zaLoginCookieKey=9b902b0ec92581f51587ce2a9da7019ec8f9582b1a43c0f437b9566049b486c2;";
-        String flowId = "FJ14309612196676b6cd4";
-
-        ZhongAnQueryCarInfoResult result = zhongAnAPIService.queryCarInfo(token, flowId);
-
-        assertNotNull(result);
-
-        Map<String, Object> unknownFields = result.getUnknownFields();
-
-        System.out.println();
-        System.out.println(unknownFields);
-    }
-}
+//package com.jzg.quotation.zhongan.crawler.service;
+//
+//import com.jzg.quotation.commons.component.RequestComponent;
+//import com.jzg.quotation.zhongan.crawler.model.entity.ZhongAnBizDocumentInfo;
+//import com.jzg.quotation.zhongan.crawler.model.result.ZhongAnQueryCarInfoResult;
+//import com.jzg.quotation.zhongan.crawler.model.result.ZhongAnQueryDocumentInfoResult;
+//import com.jzg.quotation.zhongan.crawler.model.result.ZhongAnQueryPolicyDetailResult;
+//import io.netty.channel.ChannelOption;
+//import io.netty.handler.ssl.SslContextBuilder;
+//import io.netty.handler.ssl.util.InsecureTrustManagerFactory;
+//import io.netty.handler.timeout.ReadTimeoutHandler;
+//import io.netty.handler.timeout.WriteTimeoutHandler;
+//import org.junit.jupiter.api.BeforeAll;
+//import org.junit.jupiter.api.Test;
+//import org.slf4j.Logger;
+//import org.slf4j.LoggerFactory;
+//import org.springframework.http.HttpHeaders;
+//import org.springframework.http.MediaType;
+//import org.springframework.http.client.reactive.ReactorClientHttpConnector;
+//import org.springframework.web.reactive.function.client.ExchangeFilterFunction;
+//import org.springframework.web.reactive.function.client.WebClient;
+//import reactor.core.publisher.Mono;
+//import reactor.netty.http.client.HttpClient;
+//import reactor.netty.resources.ConnectionProvider;
+//
+//import java.time.Duration;
+//import java.util.List;
+//import java.util.Map;
+//
+//import static org.junit.jupiter.api.Assertions.assertNotNull;
+//
+//public class ZhongAnAPIServiceTest {
+//    private static final Logger logger = LoggerFactory.getLogger(ZhongAnAPIServiceTest.class);
+//
+//    private static ZhongAnAPIService zhongAnAPIService;
+//
+//
+//    @BeforeAll
+//    public static void before() {
+//        // 启用SSL调试(查看握手过程)
+//        //System.setProperty("javax.net.debug", "ssl:handshake");
+//
+//        // 配置HTTP连接池
+//        ConnectionProvider connectionProvider = ConnectionProvider
+//                .builder("http")
+//                .maxConnections(500)
+//                .maxIdleTime(Duration.ofSeconds(30))
+//                .build();
+//
+//        // 配置HTTP客户端
+//        HttpClient httpClient = reactor.netty.http.client.HttpClient
+//                .create(connectionProvider)
+//                .secure(ssl -> ssl.sslContext(
+//                        SslContextBuilder.forClient()
+//                                .trustManager(InsecureTrustManagerFactory.INSTANCE)
+//                ))
+//                .option(ChannelOption.CONNECT_TIMEOUT_MILLIS, 5000)
+//                .responseTimeout(Duration.ofSeconds(50))
+//                .doOnConnected(conn ->
+//                        conn.addHandlerLast(new ReadTimeoutHandler(50)).addHandlerLast(new WriteTimeoutHandler(50)));
+//
+//        WebClient.builder()
+//                .clientConnector(new ReactorClientHttpConnector(httpClient))
+//                .build();
+//        // 构建WebClient实例
+//        WebClient webClient = WebClient
+//                .builder()
+//                .clientConnector(new ReactorClientHttpConnector(httpClient))
+//                .defaultHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON_VALUE)
+//                .defaultHeader(HttpHeaders.ACCEPT, MediaType.APPLICATION_JSON_VALUE)
+//                .filter(ExchangeFilterFunction.ofRequestProcessor(
+//                        clientRequest -> {
+//                            // 打印请求头信息
+//                            clientRequest
+//                                    .headers()
+//                                    .forEach((key, values) -> {
+//                                        logger.info("请求头: {}: {}", key, values);
+//                                    });
+//                            return Mono.just(clientRequest);
+//                        }
+//                ))
+//                .codecs(item->item.defaultCodecs().maxInMemorySize(10 * 1024 * 1024))
+//                .build();
+//
+//
+//        RequestComponent requestComponent = new RequestComponent(webClient);
+//
+//        zhongAnAPIService = new ZhongAnAPIService();
+//        zhongAnAPIService.setRequestComponent(requestComponent);
+//
+//
+//        //ChengTaiAPIHelper.initAPI("https://b2b.champion-ic.com");
+//    }
+//
+//
+//    @Test
+//    public void queryDocumentInfo() {
+//        String token = "zaLoginCookieKey=9b902b0ec92581f51587ce2a9da7019ec8f9582b1a43c0f437b9566049b486c2;";
+//        ZhongAnQueryDocumentInfoResult zhongAnQueryDocumentInfoResult = zhongAnAPIService.queryDocumentInfo(token, "291e19533f8ee5b20d8eaf64ec4f43b5");
+//
+//        assertNotNull(zhongAnQueryDocumentInfoResult);
+//
+//        List<ZhongAnBizDocumentInfo> bizDocumentInfo = zhongAnQueryDocumentInfoResult.getBizDocumentInfo();
+//
+//        for (ZhongAnBizDocumentInfo bizDocument : bizDocumentInfo) {
+//            String url = "https://c.zhongan.com/open/bmw/n/query_controller/downloadDocument.json?orderNo=%s&fileName=%s&documentUrl=%s".formatted("291e19533f8ee5b20d8eaf64ec4f43b5",bizDocument.getDocumentName(), bizDocument.getDocumentUrl());
+//
+//            System.out.println(url);
+//        }
+//    }
+//
+//    @Test
+//    public void queryPolicyDetail() {
+//        String token = "zaLoginCookieKey=9b902b0ec92581f51587ce2a9da7019ec8f9582b1a43c0f437b9566049b486c2;";
+//        String policyId = "bd162dd1260519fc39aa446aee32d9ab";
+//
+//        ZhongAnQueryPolicyDetailResult result = zhongAnAPIService.queryPolicyDetail(token, policyId);
+//
+//        assertNotNull(result);
+//
+//        String policyStatus = result.getDatas().getPolicy().getVehiclePolicyDTO().getPolicyStatus();
+//        String policyStatusText = result.getDatas().getPolicy().getVehiclePolicyDTO().getPolicyStatusText();
+//
+//        System.out.println(policyStatus);
+//        System.out.println(policyStatusText);
+//    }
+//
+//    @Test
+//    public void queryCarInfo() {
+//        String token = "zaLoginCookieKey=9b902b0ec92581f51587ce2a9da7019ec8f9582b1a43c0f437b9566049b486c2;";
+//        String flowId = "FJ14309612196676b6cd4";
+//
+//        ZhongAnQueryCarInfoResult result = zhongAnAPIService.queryCarInfo(token, flowId);
+//
+//        assertNotNull(result);
+//
+//        Map<String, Object> unknownFields = result.getUnknownFields();
+//
+//        System.out.println();
+//        System.out.println(unknownFields);
+//    }
+//}